SQL触发器阻止单行删除
我有一个表,其中有一行数据,我不希望任何人删除它。表名为ProjectnProcessData。我想确保ID为6050的数据不能删除。我该怎么做 删除时使用where条件SQL触发器阻止单行删除,sql,triggers,Sql,Triggers,我有一个表,其中有一行数据,我不希望任何人删除它。表名为ProjectnProcessData。我想确保ID为6050的数据不能删除。我该怎么做 删除时使用where条件 delete from ProjectInProcessData where id!=6050 使用触发器?你有完整的语法吗?有我想要的答案。触发器是高度特定于供应商的-因此请添加一个标记以指定您是否正在使用mysql,postgresql,sql server,oracle或db2-或者完全其他的东西。好吧-但是如果i
delete from ProjectInProcessData where id!=6050
使用触发器?你有完整的语法吗?有我想要的答案。触发器是高度特定于供应商的-因此请添加一个标记以指定您是否正在使用
mysql
,postgresql
,sql server
,oracle
或db2
-或者完全其他的东西。好吧-但是如果if EXISTS
没有返回任何行-那么您现在必须自己明确地执行删除
操作-毕竟,这是一个而不是DELETE
触发器-您正在运行此代码,而不是运行正常的DELETE
。如果找到两个ID
中的一个,此代码将抛出一个错误-在任何其他情况下它都不会执行任何操作-并且DELETE
不会发生…这就是我想要的。这两条记录是应该防止用户或任何其他开发人员意外删除的记录。@user6815384我想更好地理解它。我们不能使用一个触发器而不是DELETE,它会在表上的DELETE语句中触发吗?基本上我只是想阻止任何人删除这两条特定的记录。我添加了额外的代码“ELSE Begin--END”,然后用户可以删除除6610或6666之外的任何ID。@user6815384,谢谢!我正在考虑用下面的方式来解决这个问题。
Create Trigger [dbo].[triggerPreventDeleteFormula]
ON [dbo].[AHSC_Project_InprocessData]
INSTEAD OF DELETE
AS
BEGIN
IF EXISTS(
SELECT *
FROM deleted d
where d.AHSC_Project_InprocessData_ID = '6610' or d.AHSC_Project_InprocessData_ID = '6666'
)
BEGIN
ROLLBACK;
RAISERROR('Can not delete this record: this record contains default formula',16,1);
END
ELSE
BEGIN
DELETE [AHSC_Project_InprocessData]
WHERE EXISTS (Select * from deleted d where d.AHSC_Project_InprocessData_ID = [AHSC_Project_InprocessData].AHSC_Project_InprocessData_ID)
END
END