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表变量中
这些值将插入到表变量中,您可以在插入后从该表变量中选择它们,并执行您需要执行的操作:
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)
| 归档时间: |
|
| 查看次数: |
3729 次 |
| 最近记录: |