加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql – 删除而不是删除触发器中的记录

发布时间:2021-01-01 15:28:14 所属栏目:编程 来源:网络整理
导读:我想要一个而不是删除触发器,以便我可以从正被删除的表行中获取文本字段值,以便在现实删除时保存这些字段.出于某种缘故起因,我无法在尺度的Delete触发器中将它们从Deleted表中拉出来(SQL错误输出). 有没有步伐在“而不是删除”触发器内举办现实删除而不使触发器重

我想要一个而不是删除触发器,以便我可以从正被删除的表行中获取文本字段值,以便在现实删除时保存这些字段.出于某种缘故起因,我无法在尺度的Delete触发器中将它们从Deleted表中拉出来(SQL错误输出).

有没有步伐在“而不是删除”触发器内举办现实删除而不使触发器从头启动?

可能一旦删除行以生涯到新记录中,获取文本字段的更好要领是什么?

办理要领

这个要领应该可以办理题目.而不是触发器将执行您指定的任何操纵,而不是自动执行删除操纵.这意味着手动删除密钥或记录不会被删除是要害.它不会递归运行.它只能在没有启用级联删除的表上完成.根基上,能力是你插手id字段的原始表,以便从删除的伪表中无法会见的字段中获取数据.
create table dbo.mytesting (test_id int,sometext text)
go
create table dbo.myaudit (test_id int,sometext text)
go
insert into dbo.mytesting
values (1,'test')
go

Create Trigger audit_Table_Deletes on dbo.mytesting INSTEAD OF delete  
as 
if @@rowcount = 0 return; 
Insert into dbo.myaudit (test_id,sometext) 
Select d.test_id,t.sometext from deleted d 
join dbo.mytesting t on t.test_id = d.test_id

Delete dbo.mytesting where test_id in (select test_id from deleted)
go

delete dbo.mytesting where test_id = 1
select * from dbo.mytesting
select * from dbo.myaudit 
Go 

drop table dbo.mytesting
drop table dbo.myaudit

假如您可以将字段变动为varchar(max)或nvarchar(max),这是最佳办理方案.不保举行使Text和ntext,应该在下一版本中从SQL Server中删除它们.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读