zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

SQL 一个表中的两个外键来自于同一个表创造的视图

SQL 一个 视图 两个 表中 外键 来自 创造
2023-09-11 14:19:13 时间
/*****************************************---Geovin Du 塗聚文 締友計算機信息技術有限公司---公司集團有親屬員工顯示介紹人的姓名。一個表中的兩個外鍵是來自於一個同表*****************************************/ --員工表IF EXISTS (select * from sysobj

/*****************************************
---Geovin Du 塗聚文 締友計算機信息技術有限公司
---公司集團有親屬員工顯示介紹人的姓名。一個表中的兩個外鍵是來自於一個同表
*****************************************/

--員工表
IF EXISTS (select * from sysobjects where id = object_id(N[dbo].[Employeetest]) and OBJECTPROPERTY(id, NIsUserTable) = 1)
DROP TABLE [Employeetest]
GO
create table Employeetest
(
 Eid INT IDENTITY(1,1) PRIMARY KEY,
 Ename nvarchar(30) not null,

)
--插入數據
insert into Employeetest(Ename) values(geovindu)
insert into Employeetest(Ename) values(geovindu1)
insert into Employeetest(Ename) values(geovindu2)
insert into Employeetest(Ename) values(geovindu3)
insert into Employeetest(Ename) values(geovindu4)
insert into Employeetest(Ename) values(geovindu5)

---公司內部介紹人表
IF EXISTS (select * from sysobjects where id = object_id(N[dbo].[Retationtest]) and OBJECTPROPERTY(id, NIsUserTable) = 1)
DROP TABLE [Retationtest]
GO
create table Retationtest
(
 rid INT IDENTITY(1,1) PRIMARY KEY,
        REkey int not null, --員工(介紹人)外键
        REpkey int not null,--員工(員工)外键
 ReationsName nvarchar(30) not null

)
--插入
insert into Retationtest(REkey,REpkey,ReationsName) values(1,3,sz)

--函數
if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[GetName]) and xtype in (NFN, NIF, NTF))
drop function [dbo].[GetName]
CREATE   function  GetName

   @REpkey int --参数
)
returns varchar(500)
as
begin
declare @ename nvarchar(50)
select @ename=Ename from Employeetest where Eid=@REpkey

return @ename
end
GO


--測試
declare @ename nvarchar(50),@REpkey int
set @REpkey=2
select @ename=Ename from Employeetest where Eid=@REpkey
select @ename


--視圖
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
      WHERE TABLE_NAME = View_Employeetest)
   DROP VIEW View_Employeetest
GO
create view View_Employeetest
as
select rid AS ID,Ename AS 介紹人姓名,dbo.GetName(REpkey) AS 員工姓名, ReationsName AS 關系 from Employeetest,Retationtest
where Employeetest.Eid=Retationtest.REkey
--and Employeetest.Eid=Retationtest.REpkey
GO

--顯示
select * from View_Employeetest


【SQL开发实战技巧】系列(八):聊聊如何插入数据时比约束更灵活的限制数据插入以及怎么一个insert语句同时插入多张表 插入数据、阻止对某几列插入的实现、复制表的定义和数据以及注意事项、比创建约束功能更强大!用 WITH CHECK OPTION限制数据录入、如何一个insert将数据同时插入多个表【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。但是!ORA - 01723 : 不允许长度为 0 的列。
geovindu 读者是,读之者,者之读.一沙一世界! to be is to do举世皆清我独浊,众人皆醒我独醉.俺是农民工,程序员.
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践 立即下载