2012-01-16 87 views
5

我正在使用SQL Server 2008創建過程。在INSERT時獲取標識列值

我使用下面的SQL語句插入到一個審計表

insert into Listuser 
(
    UserID, 
    ListID, 
    AuditCreated 
) 
    select 
    UserID, 
    ListID, 
    GETDATE() 
from ListUser where Surname='surname' 

我使用scope_identity()來從LISTUSER表中標識列並插入標識列到另一個日誌表

如果select語句包含多個值,如何獲取兩列的標識值並插入到日誌表中?

Thanjs

回答

12

如果您需要捕獲插入多個標識值,我會用OUTPUT條款:

這將插入所有行到您的ListUser表,它會輸出所有由此產生的INSERT身份到@TableOfIdentities表變量

Read more about the OUTPUT clause on MSDN

這些值插入到表變量,你可以從插入後表變量選擇出來,做任何你需要做的與他們:

SELECT * FROM @TableOfIdentities 

更新:使用的這裏的table變量就是一個例子 - 當然你也可以將數據輸出到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' 
+0

我們可以直接添加到永久表 – user386258 2012-01-16 07:56:23

+1

@ user3862 58:我們可以,但是目標表不能有什麼東西存在某些限制。閱讀marc_s鏈接的文章瞭解更多詳情。 – 2012-01-16 08:06:07

+0

@ marc_s,我可以直接將ID插入到永久表(日誌表)中,而不是表變量 – user386258 2012-01-16 08:08:20