事务如何在 SQL Server 中具有多个 VALUES 的单个 INSERT 中工作

表演

我想确保一次插入 2 行。如果我INSERT像这样同时执行 2 个查询

CREATE TABLE [dbo].[Table_test2]
(
    [column1] [int] NOT NULL ,
    [column2] [int] NOT NULL ,
    PRIMARY KEY(column1, column2)
)
-- column1 & column2 = primary key

--query 1
BEGIN TRAN
    INSERT INTO Table_test(column1, column2) VALUES (1,1)
    INSERT INTO Table_test(column1, column2) VALUES (2,2)

    COMMIT TRAN

--query 2
BEGIN TRAN
    INSERT INTO Table_test(column1, column2) VALUES (2,2)
    INSERT INTO Table_test(column1, column2) VALUES (1,1)

    COMMIT TRAN

我认为 query1 和 query2 都会失败。因为表将在第一条INSERT语句后解锁,所以 query1 和 query2 将成功插入第一行。但是当每个查询插入第二个INSERT语句时它不能正常工作。

所以我会像这样改变查询。可以吗?

如果第一个查询正常工作,则可以忽略第二个查询。

--query 1
BEGIN TRAN
    INSERT INTO Table_test(column1, column2) VALUES (1,1), (2,2)
    COMMIT TRAN

--query 2
BEGIN TRAN
    INSERT INTO Table_test(column1, column2) VALUES (2,2), (1,1)
    COMMIT TRAN

我想知道我是否使用INSERT具有多个值的单个语句,是否确保在一个事务中插入 2 行?

ps 抱歉我英语不好

游戏战争

之后的任何内容Begin Tran都将完全执行或全部失败..所以您的值子句也将失败..

来自官方文档(重点是我的)

BEGIN TRANSACTION 表示连接引用的数据在逻辑上和物理上一致的点。如果遇到错误,在 BEGIN TRANSACTION 之后所做的所有数据修改都可以回滚以将数据返回到这种已知的一致性状态

所以没关系,如果你重视条款或单独的 DML,一切都会失败..

我想知道我是否使用具有多个值的单个 INSERT 语句,是否确保在一个事务中插入 2 行?

即使您不在这两个子句之间使用整个语句,逻辑上也将在一个事务下

此外 values 子句只是语法糖,它在引擎盖下作为单独的插入语句工作,您可以从下面的屏幕截图中看到相同的内容

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL Server-如何在多行INSERT事务中手动增加PK

Cordova SQL-如何在单个事务中执行多个参数化的插入语句

多个INSERT语句与具有多个VALUES的单个INSERT

如何在SQL Server 2014中检查活动事务?

如何在 SQL Server 中停止插入事务?

WHERE 中的 SQL Server CASE 具有单个条件但多个返回

如何在 (C#) ASP.NET 和 SQL Server 中回滚多个事务

我可以回滚SQL Server中具有多个内部事务的事务吗?

Coalesce如何在SQL Server中工作?

如何在QDoubleSpinBox中的单个步骤具有多个值

如何在React中让onClick在具有多个同级元素的单个元素上工作?

如何在单个查询中执行多个Insert语句?

如何在SQL Server中使用单个查询在多个表中插入数据?

如何在 SQL Server 中自动增加 INSERT INTO

如何在 SQL Server 中为每个 ID 筛选具有多个值的列

如何在SQL Server中查询具有多个键/值对约束的记录?

如何在SQL Server中检索相同的Empid具有多个具有最新日期的deptnos

如何在R中将具有多个工作表的多个excel文件合并到具有多个工作表的单个excel文件中

如何将多个 Excel 工作簿合并到具有多个工作表的单个工作簿中

如何在SQL Server中的触发器中修复If条件与回滚事务

在SQL Server 2012中,如何在事务期间阻止对给定索引值的访问?

如何在存储过程中提交事务之前在SQL Server中锁定选择的行

如何在SQL Server Service Broker RECEIVE中获取空结果集而不是等待事务结束?

在 SQL Server 中的单个列/行中获取多个值

INSERT在SQL Server中暂停

如何在SQL Server中获取具有不同P1等级的多个团队中的人员

如何在单个 PyFlink SQL 作业中有多个 INSERT 语句?

SQL Server对由单个transactionID完成的多个事务求和

如果一个参数在单个参数的函数中具有多个值,如何从pl / sql函数获取数据