gpt4 book ai didi

sql - 事务如何在 SQL Server 中使用多个 VALUES 的单个 INSERT 中工作

转载 作者:行者123 更新时间:2023-12-02 00:43:31 25 4
gpt4 key购买 nike

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

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 行?

附注抱歉我英语不好

最佳答案

Begin Tran 之后的内容将被完全执行或全部执行失败..因此您的 values 子句也将失败..

来自官方文档(强调我的)

BEGIN TRANSACTION represents a point at which the data referenced by a connection is logically and physically consistent. If errors are encountered, all data modifications made after the BEGIN TRANSACTION can be rolled back to return the data to this known state of consistency.

所以没关系,如果你设置子句或单独的 DML,一切都会失败..

I wonder if I use single INSERT statement with multiple values, is it ensure inserting 2 row at one transaction?

即使您不使用这两个子句之间的整个语句在逻辑上也属于一个事务

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

enter image description here

关于sql - 事务如何在 SQL Server 中使用多个 VALUES 的单个 INSERT 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45227850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com