SQL触发器阻止单行删除

SQL触发器阻止单行删除,sql,triggers,Sql,Triggers,我有一个表,其中有一行数据,我不希望任何人删除它。表名为ProjectnProcessData。我想确保ID为6050的数据不能删除。我该怎么做 删除时使用where条件 delete from ProjectInProcessData where id!=6050 使用触发器?你有完整的语法吗?有我想要的答案。触发器是高度特定于供应商的-因此请添加一个标记以指定您是否正在使用mysql,postgresql,sql server,oracle或db2-或者完全其他的东西。好吧-但是如果i

我有一个表,其中有一行数据,我不希望任何人删除它。表名为ProjectnProcessData。我想确保ID为6050的数据不能删除。我该怎么做

删除时使用where条件

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