在Management Studio上为Azure SQL数据库设置隐式事务为ON

问题描述 投票:0回答:2

在SQL Server Management Studio中,我检查了选项Tools / Options / Query Execution / SQL Server / ANSI / SET IMPLICIT TRANSACTIONS

这适用于SQL Server数据库,但如果我连接到Azure SQL数据库,则似乎不起作用

如何将Azure SQL数据库的IMPLICIT_TRANSACTIONS默认设置为ON?

azure-sql-database ssms
2个回答
0
投票

我无法重现该问题。首先,我使用以下脚本测试了SQL Server和SQL Azure在隐式事务上的行为是否相同。

-- Transact-SQL.  

go  

-- Preparations.  

SET NOCOUNT ON;  

SET IMPLICIT_TRANSACTIONS OFF;  

go  

WHILE (@@TranCount > 0) COMMIT TRANSACTION;  

go  

IF (OBJECT_ID(N'dbo.t1',N'U') IS NOT NULL) DROP TABLE dbo.t1;  

go  

CREATE table dbo.t1 (a int);  

go  



PRINT N'-------- [Test A] ---- OFF ----';  

PRINT N'[A.01] Now, SET IMPLICIT_TRANSACTIONS OFF.';  

PRINT N'[A.02] @@TranCount, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

SET IMPLICIT_TRANSACTIONS OFF;  

go  

INSERT INTO dbo.t1 VALUES (11);  

INSERT INTO dbo.t1 VALUES (12);  

PRINT N'[A.03] @@TranCount, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

go  



PRINT N' ';  

PRINT N'-------- [Test B] ---- ON ----';  

PRINT N'[B.01] Now, SET IMPLICIT_TRANSACTIONS ON.';  

PRINT N'[B.02] @@TranCount, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

SET IMPLICIT_TRANSACTIONS ON;  

go  

INSERT INTO dbo.t1 VALUES (21);  

INSERT INTO dbo.t1 VALUES (22);  

PRINT N'[B.03] @@TranCount, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

go  

COMMIT TRANSACTION;  

PRINT N'[B.04] @@TranCount, after COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

go  



PRINT N' ';  

PRINT N'-------- [Test C] ---- ON, then BEGIN TRAN ----';  

PRINT N'[C.01] Now, SET IMPLICIT_TRANSACTIONS ON.';  

PRINT N'[C.02] @@TranCount, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

SET IMPLICIT_TRANSACTIONS ON;  

go  

BEGIN TRANSACTION;  

INSERT INTO dbo.t1 VALUES (31);  

INSERT INTO dbo.t1 VALUES (32);  

PRINT N'[C.03] @@TranCount, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

go  

COMMIT TRANSACTION;  

PRINT N'[C.04] @@TranCount, after a COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

COMMIT TRANSACTION;  

PRINT N'[C.05] @@TranCount, after another COMMIT, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

go  



PRINT N' ';  

PRINT N'-------- [Test D] ---- ON, INSERT, BEGIN TRAN, INSERT ----';  

PRINT N'[D.01] Now, SET IMPLICIT_TRANSACTIONS ON.';  

PRINT N'[D.02] @@TranCount, at start, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

SET IMPLICIT_TRANSACTIONS ON;  

go  

INSERT INTO dbo.t1 VALUES (41);  

BEGIN TRANSACTION;  

INSERT INTO dbo.t1 VALUES (42);  

PRINT N'[D.03] @@TranCount, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

go  

COMMIT TRANSACTION;  

PRINT N'[D.04] @@TranCount, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

COMMIT TRANSACTION;  

PRINT N'[D.05] @@TranCount, after INSERTs, == ' + CAST(@@TRANCOUNT AS NVARCHAR(10));  

go  



-- Clean up.  

SET IMPLICIT_TRANSACTIONS OFF;  

go  

WHILE (@@TranCount > 0) COMMIT TRANSACTION;  

go  

DROP TABLE dbo.t1;  

go

0
投票

我刚刚关注文档:SET IMPLICIT_TRANSACTIONS (Transact-SQL)

© www.soinside.com 2019 - 2024. All rights reserved.