将OUTPUT Insert.id插入到多个值insert中的另一个表中

Sam*_*ami 1 sql-server multiple-insert sqltransaction

为简单起见假设我有两张桌子

user table (id, email)

user log table (id, date)

无论在用户表中插入什么id,都应该在user_log表中插入相同的id,否则事务应该失败.

我怎样才能做到这一点

BEGIN TRANSACTION

INSERT into user(id, email) OUTPUT Inserted.id (1, 'a@x.com', 'x'), (2, 'b@x.com', 'y')  

// I also want to be able to do
INSERT into user_log(id, date) values(1, date), (2, date) 

COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

Gar*_*thD 6

您可以将输出直接插入user_log表:

BEGIN TRANSACTION

INSERT INTO [User] (ID, Email)
OUTPUT inserted.id, CURRENT_TIMESTAMP INTO user_log(id, date)
VALUES (1, 'a@x.com'), (2, 'b@x.com');

COMMIT TRANSACTION  
Run Code Online (Sandbox Code Playgroud)

关于SQL小提琴的例子


如果你需要返回id,你可以添加第二个OUTPUT子句:

BEGIN TRANSACTION

INSERT INTO [User] (ID, Email)
OUTPUT inserted.id, CURRENT_TIMESTAMP INTO user_log(id, date)
OUTPUT inserted.id                      
VALUES (1, 'a@x.com'), (2, 'b@x.com');

COMMIT TRANSACTION  
Run Code Online (Sandbox Code Playgroud)