首页 [训练]sql级联修改删除

[训练]sql级联修改删除

举报
开通vip

[训练]sql级联修改删除[训练]sql级联修改删除 --sql语句实现级联修改和删除 -- 此代码有点危险,,级联删除少用,,不然到时连数据表中记录怎么少了都不知道 ALTER TABLE [tablename] DROP CONSTRAINT FK_name ALTER TABLE [tablename] add CONSTRAINT [FK_name] FOREIGN KEY ( [fk_tableid] ) REFERENCES [pk_tablename] ( [pk_tableid] ) on update ...

[训练]sql级联修改删除
[训练]sql级联修改删除 --sql语句实现级联修改和删除 -- 此代码有点危险,,级联删除少用,,不然到时连数据 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 怎么少了都不知道 ALTER TABLE [tablename] DROP CONSTRAINT FK_name ALTER TABLE [tablename] add CONSTRAINT [FK_name] FOREIGN KEY ( [fk_tableid] ) REFERENCES [pk_tablename] ( [pk_tableid] ) on update cascade on delete cascade 如果,现在有两张表A(id,xx.xx...),C(id,Cid,xx,xx...),预实现C中的id与A 中id级联删 除、级联更新/数据同步,可有两种实现方式: 一. 利用sql server自带的级联删除、级联更新功能,即其外键约束途径 alter table dbo.C add constraint FK_C_A_AID foreign key(AID) references dbo.A(AID) on delete cascade on update casade go alter table dbo.C add constraint FK_C_B_BID foreign key(BID) references dbo.B(BID) on delete cascade on update casade go 级联更新和级联删除方式: Alter TABLE [dbo].[T_USERGROUP] ADD CONSTRAINT [FK_T_USERGROUP_T_ACCTTEMPLATE] FOREIGN KEY ( [ATNAME] ) REFERENCES [dbo].[T_ACCTTEMPLATE] ( [ATNAME] ) ON Update CASCADE ON Delete CASCADE 二、另外,我们也完全可以自已写一个触发器来实现此功能 A: int id varchar(20) name C: int id int Cid varchar(100) info 假设表A、C的字段如上: 如以级联删除表A、C记录为例,实现语句如下: (如果删除表A中的记录,则自动删除表C中与表A中id相同的记录) CREATE TRIGGER trg_a ON A FOR INSERT,UPDATE,DELETE AS BEGIN DECLARE @nInsRows INT --用于插入记录条数统计 DECLARE @nCount INT --用于删除记录条数统计 DECLARE @nCOde INT --删除的记录 -- 统计插入的的记录数并存放在@nInsRows里面 SELECT @nInsRows = COUNT(*) FROM INSERTED -- 统计删除的记录数并存放在@nCount里面 SELECT @nCount = COUNT(*) FROM DELETED IF(@nCount > 0) BEGIN delete C from deleted where C.id=deleted.id END IF (@nInsRows > 0 AND @nCount = 0) --如果是插入数据 BEGIN insert into C select * from inserted END IF (@nInsRows > 0 AND @nCount > 0) -- 如果是更新数据 BEGIN select @nCOde=id from inserted IF EXISTS (select * from C where C.id=@nCOde) BEGIN update C set C.id='xx' where id=@nCOde) END ELSE BEGIN insert into C select * from inserted END END END 另外,下面的一段文字值得体会: 在MS SQL Server中,我们可能会遇到这样的问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 : 在触发器中,需要把新插入记录中的某些字段值作为参数去操作另一些记录。 举例: 建一条消息的同时,追加给每个用户一个未读状态,每个用户都有自己的阅读状态。 A消息表 B用户表 C状态表 我们在为A表追加记录的同时,需要为C表追加与B表用户数一样多的用户阅读状态表。 解决这个问题,我们可以把它放在SQL服务器的触发器中,用行级触发器。需要用到以下知识: deleted 和 inserted 是逻辑(概念)表。这些表在结构上类似于定义触发器的表(也就是在其中尝试用户操作的表);这些表用于保存用户操作可能更改的行的旧值或新值。例如,若要检索 deleted 表中的所有值,请使用: SELECT * FROM deleted 触发器代码: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER TRIGGER [mys] ON [dbo].[dt_Message] --dt_Message是上面说的A表,在这里,为它指定行级触发 AFTER INSERT AS BEGIN insert dt_MessageIsOpen (UserId,MessageId) select UserId,Inserted.MessageId from aspnet_Users,Inserted --被插入数据的MessageIsOpen是上面所说的C表,在这里,它被作为触发器触发之后的操作对象 --作为数据源的有Inserted, aspnet_Users两个表,inserted 是逻辑(概 念)表,在这里,它把A表中新插入记录中的MessageId作为数据源参数; aspnet_Users是上面提到的B表,它为C表提供UserId。 END
本文档为【[训练]sql级联修改删除】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_531654
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:5
分类:企业经营
上传时间:2018-02-19
浏览量:15