在MS SQL Server 2008 R2中,我们需要一个预插入和预更新触发器,该触发器可以检查某些内容并允许(或通过raiserror)回滚正在运行的插入/更新。
raiserror
问题 :INSTEAD OF触发。是否真的需要显式地编写插入或更新?因为我们希望完成默认的插入或更新操作,所以仅执行“预检查”。
INSTEAD OF
是的。
您确实需要编写显式INSERT或UPDATE。
INSERT
UPDATE
触发器运行INSTEAD OFDML操作。如果将触发器留为空白,则除了INSERTED/DELETED表将在创建和填充中/之外,将不会执行任何其他操作tempdb。
INSERTED
DELETED
tempdb
尽管从评论中的讨论来看,我根本不会使用触发器,而是使用唯一的过滤索引CREATE UNIQUE INDEX ix ON T(a,b,c) WHERE c<> ''。在处理并发时,这可能会提高性能,并避免潜在的逻辑问题。
CREATE UNIQUE INDEX ix ON T(a,b,c) WHERE c<> ''