SQL 一个表中的两个外键来自于同一个表创造的视图
/*****************************************
---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落地实践 立即下载
相关文章
- SQL Pretty Printer 格式化sql 利器
- sql server2017与IIS10的一个会话最大利用CPU核心好像都是64核心
- Sql Server 中将由逗号“,”分割的一个字符串转换为一个表集,并应用到 in 条件中
- SQL HAVING 子句
- 城市经纬度 json 理解SignalR Main(string[] args)之args传递的几种方式 串口编程之端口 多线程详细介绍 递归一个List<T>,可自己根据需要改造为通用型。 Sql 优化解决方案
- is-a,has-a,like-a是什么 sql server中,N''表示什么意思? 关于SQL SERVER的N前缀的理解
- SQL案例分析-应用系统用户权限设计.sql
- Sql Server 2005/2008中把一个数据库中的表完整复制到另一个数据库!(已解决)
- 第七十八章 SQL函数 $LENGTH
- SQL注入篇——对information_schema数据库的解析
- 《Oracle SQL疑难解析》——1.6 批量地从一个表中复制数据到另一个表
- sql语言实践之自学SQL网(SQL Lesson8,9)
- 通过explain分析低效的SQL执行计划
- sql server 小技巧(7) 导出完整sql server 数据库成一个sql文件,包含表结构及数据
- sql server 小技巧(4) Sql server 排序时让空值排在最后
- sql server 小技巧(3) SQL Server 2012 数据库完整导出到SQL Azure (包括数据)
- SQL查询一个表中类别字段中Max()最大值对应的记录
- SQL Server复制入门(一)----复制简介【转】
- 人人都是 DBA(IV)SQL Server 内存管理
- SQL Server 2012安装图解
- SQL Server SSPI handshake failed报错,sql server修改windows账户密码的影响,sql server订阅发布客户端访问一直报错
- sql server错误日志
- 【sql server复制】教你使用SQL SERVER复制
- mysql查看执行sql语句的记录日志
- SQL:将查询结果插入到另一个表的三种情况
- SQL Server中将多行数据拼接为一行数据(一个字符串)
- SQL通过一个表数据更新另外一个表
- SQL 分页查询(通用型
- SQL Server死锁问题:事务(进程 ID x)与另一个进程被死锁在 锁 | 通信缓冲区资源上并且已被选作死锁牺牲品。请重新运行该事务。