我正在使用SQL Server 2008创建一个过程。
我使用以下sql语句插入审计表
insert into Listuser
(
UserID,
ListID,
AuditCreated
)
select
UserID,
ListID,
GETDATE()
from ListUser where Surname='surname'
我使用scope_identity()
从listuser表中获取标识列,并将标识列插入另一个日志表
如果select语句包含多于1个值,如何获取两列的标识值并插入到日志表中?
Thanjs
答案 0 :(得分: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'
这会将所有行插入到ListUser
表中,并将此INSERT生成的所有标识输出到@TableOfIdentities
表变量
Read more about the OUTPUT clause on MSDN
这些值被插入到表变量中,你可以在插入后从那个表变量中选择它们,并做你需要做的任何事情:
SELECT * FROM @TableOfIdentities
更新:这里使用表变量就是一个例子 - 当然你也可以将数据输出到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'