在INSERT上获取标识列值

use*_*258 5 sql t-sql sql-server sql-server-2008

我正在使用SQL Server 2008来创建一个过程.

我使用以下sql语句插入审计表

 insert into  Listuser
 (
   UserID,
   ListID,
   AuditCreated
  )
   select
   UserID,
   ListID,
    GETDATE()
 from  ListUser where Surname='surname'
Run Code Online (Sandbox Code Playgroud)

scope_identity()用来从listuser表中获取标识列,并将标识列插入另一个日志表

如果select语句包含多于1个值,如何获取两列的标识值并插入到logs表中?

Thanjs

mar*_*c_s 12

如果您需要捕获插入的多个标识值,我将使用以下OUTPUT子句:

DECLARE @TableOfIdentities TABLE (IdentValue INT)

INSERT INTO dbo.Listuser(UserID, ListID, AuditCreated) 
  OUTPUT Inserted.ID INTO @TableOfIdentities(IdentValue)
  SELECT
      UserID, ListID, GETDATE()
  FROM 
      dbo.ListUser 
  WHERE
      Surname = 'surname'
Run Code Online (Sandbox Code Playgroud)

这会将所有行插入到ListUser表中,并将此INSERT生成的所有标识输出到@TableOfIdentities表变量中

阅读有关MSDN上的OUTPUT子句的更多信息

这些值将插入到表变量中,您可以在插入后从该表变量中选择它们,并执行您需要执行的操作:

SELECT * FROM @TableOfIdentities
Run Code Online (Sandbox Code Playgroud)

更新:这里使用表变量就是一个例子 - 当然你也可以将数据输出到SQL Server中的"普通"表中 - 如果需要,你也可以为每个插入的行输出多个值 -所以你可以有类似的东西:

INSERT INTO dbo.Listuser(UserID, ListID, AuditCreated) 
  OUTPUT Inserted.ID, Inserted.UserID, Inserted.SurName, GETDATE() 
       INTO AuditTable(IdentValue, UserID, Surname, InsertDate)
  SELECT
      UserID, ListID, GETDATE()
  FROM 
      dbo.ListUser 
  WHERE
      Surname = 'surname'
Run Code Online (Sandbox Code Playgroud)