Sql Server触发器。触发器如何检查Update命令?
我有一个审核采购和销售表的触发器。触发器在INSERT和DELETE上。要检查其“插入”,条件为Sql Server触发器。触发器如何检查Update命令?,sql,sql-server-2008,Sql,Sql Server 2008,我有一个审核采购和销售表的触发器。触发器在INSERT和DELETE上。要检查其“插入”,条件为 IF (SELECT COUNT(*) FROM INSERTED) > 0 BEGIN END 如何检查触发器中是否有更新命令 Arun插入、删除触发器不会触发更新 创建一个插入,更新,删除多功能表 IF @@ROWCOUNT = 0 BEGIN RETURN; END; IF EXISTS(SELECT * FROM inserted) BEGIN IF
IF (SELECT COUNT(*) FROM INSERTED) > 0
BEGIN
END
如何检查触发器中是否有更新命令
Arun插入、删除触发器不会触发更新
创建一个
插入
,更新
,删除
多功能表
IF @@ROWCOUNT = 0
BEGIN
RETURN;
END;
IF EXISTS(SELECT * FROM inserted)
BEGIN
IF EXISTS(SELECT * FROM deleted)
BEGIN
-- for UPDATE
END
ELSE
BEGIN
-- for INSERT
END
END
ELSE
BEGIN
-- for DELETE
END;
一旦您将触发器(作为Mitch)更新为也适用于
UPDATE
s,您需要首先检查更新:
IF EXISTS(select * from inserted) and EXISTS(select * from deleted)
BEGIN
--Update
END
请注意,我已切换到EXISTS
而不是COUNT(*)
。Exists更恰当地描述了我们要建立的内容—表中存在行。我们不关心其中有多少行。在更新触发器中起作用的“表”仍然称为插入的和删除的,行的旧值在删除的表中,新值在插入的表中
您可以使用以下逻辑来检测您是处于插入、更新还是删除状态:
CREATE TRIGGER MyTrigger
ON MyTable
AFTER INSERT,DELETE,UPDATE -- you need to add the "update" here,
-- in order to catch updates as well
AS
BEGIN
Declare @insertedCount int
Declare @deletedCount int
select @insertedCount = COUNT(*) from inserted
select @deletedCount = COUNT(*) from deleted
if (@insertedCount != 0) -- we have some new values
if (@deletedCount = 0) -- do we have old values?
print 'Inserting'
else
print 'Updating'
else
print 'Deleting'
END
我要感谢“SWeko”提供的线索
现在,这就是我所做的,扳机起作用了
CREATE TRIGGER dbo.Sample
ON TableName
FOR INSERT, UPDATE, DELETE
AS
IF (SELECT COUNT(*) FROM INSERTED) > 0
BEGIN
IF (SELECT COUNT(*) FROM DELETED) > 0
BEGIN
-- UPDATE (TABLE).
END
ELSE
BEGIN
-- INSERT (TABLE).
END
END
ELSE
-- DELETE (TABLE).
BEGIN
END