Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Server触发器。触发器如何检查Update命令?_Sql_Sql Server 2008 - Fatal编程技术网

Sql Server触发器。触发器如何检查Update命令?

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

我有一个审核采购和销售表的触发器。触发器在INSERT和DELETE上。要检查其“插入”,条件为

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