SQL Server 2012中的Oracle AUDSID等价物

时间:2014-08-06 14:31:02

标签: sql sql-server-2012 audit

请问等效的SQL Server 2012代码是什么?

 IF INSERTING THEN
            :NEW.audsid:=SYS_CONTEXT('USERENV', 'SESSIONID');

1 个答案:

答案 0 :(得分:2)

Oracle和SQL Server处理触发器的方式截然不同。 Oracle的概念是触发器一次只影响一行。 SQL Server没有。相反,它使用"表" inserted包含新行。

所以,你的问题有三个部分:

  1. 等同于INSERTED
  2. 等同于SYS_CONTEXT('USERENV', 'SESSIONID')
  3. 在SQL Server中执行此操作的最佳方法是什么?
  4. 以下是前两个问题的答案:

    if (exists (select 1 from inserted) and (not exists (select 1 from deleted))
        update inserted
            set audsid = @@SPID;
    

    但是,在大多数情况下,您只需在列定义中使用default关键字:

    audsid int default @@SPID
    

    更容易,并且不需要触发器。