sql-server - Insert OUTPUT Insert.id to another table in multiple values insert

标签 sql-server sqltransaction multiple-insert

为了简单起见,假设我有两个表

用户表(id,email)

用户日志表(id, date)

无论 id 被插入到 user 表中,相同的 id 也应该被插入到 user_log 表中,否则事务应该失败。

我该怎么做

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

最佳答案

您可以将输出直接插入到 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  

Example on SQL Fiddle


如果您需要返回 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  

关于sql-server - Insert OUTPUT Insert.id to another table in multiple values insert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26400301/

相关文章:

SQL使用select插入到语句中

sql-server - 在多个数据库服务器上执行并行查询(运行 Microsoft SQL Server)

sql-server - 执行存储过程时为"Operation is not allowed when the object is closed"

mysql - 如何将数据从一个 SQL 列表复制到另一个 SQL 列表

c# - SQL Server 序列间隙

sql-server - 当sql server 2005中的try catch捕获错误时如何防止事务回滚

MySql:插入行时的事务安全

PHP MySQL InnoDB 使用事务多次插入不同表失败

oracle - 在Oracle中按顺序插入多行