2012-01-16 38 views
5

Tôi đang sử dụng SQL Server 2008 để tạo quy trình.Nhận giá trị cột nhận dạng khi INSERT

Tôi đang sử dụng câu lệnh sql sau đây để chèn vào một bảng kiểm toán

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

Tôi đang sử dụng scope_identity() để có được những cột sắc từ bảng listuser và chèn cột sắc khác ghi bàn

Nếu câu lệnh chọn có chứa nhiều hơn 1 giá trị, làm thế nào để có được giá trị nhận dạng của cả hai cột và chèn vào bảng nhật ký?

Thanjs

Trả lời

12

Nếu bạn cần phải nắm bắt nhiều giá trị bản sắc được chèn, tôi muốn sử dụng OUTPUT khoản:

này sẽ chèn tất cả các hàng vào bảng ListUser của bạn, và nó sẽ ra tất cả sắc được tạo ra bởi INSERT này vào biến @TableOfIdentities bảng

Read more about the OUTPUT clause on MSDN

Những giá trị này được đưa vào các biến bảng, và bạn có thể chọn chúng ra từ đó biến bảng sau khi chèn, và làm bất cứ điều gì bạn cần làm với họ:

SELECT * FROM @TableOfIdentities 

Cập nhật: việc sử dụng các biến bảng ở đây chỉ là một ví dụ - tất nhiên bạn cũng có thể xuất dữ liệu vào một bảng "bình thường" trong SQL Server - và bạn cũng có thể xuất nhiều giá trị cho mỗi hàng được chèn vào, nếu bạn cần - :

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

chúng tôi có thể thêm trực tiếp vào bảng vĩnh viễn – user386258

+1

@ user3862 58: Chúng ta có thể, nhưng có những hạn chế nhất định như những gì mà bàn mục tiêu không thể có. Đọc bài viết được liên kết bởi marc_s để biết thêm chi tiết. –

+0

@ marc_s, tôi có thể chèn id trực tiếp vào bảng vĩnh viễn (bảng nhật ký) thay vì bảng biến – user386258

Các vấn đề liên quan