Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure sql database 在ManagementStudio for Azure SQL数据库上设置隐式事务_Azure Sql Database_Ssms - Fatal编程技术网

Azure sql database 在ManagementStudio for Azure SQL数据库上设置隐式事务

Azure sql database 在ManagementStudio for Azure SQL数据库上设置隐式事务,azure-sql-database,ssms,Azure Sql Database,Ssms,在SQLServerManagementStudio中,我选中选项Tools/Options/QueryExecution/SQLServer/ANSI/SETIMPLICIT TRANSACTIONS 这适用于SQL Server数据库,但如果我连接到Azure SQL数据库,它似乎不起作用 对于Azure SQL数据库,如何在默认情况下将隐式_事务设置为ON 编辑 我试过这个: 从对象资源管理器中,我选择数据库,右键单击,新建查询并执行以下脚本: CREATE TABLE T1 (a INT

在SQLServerManagementStudio中,我选中选项Tools/Options/QueryExecution/SQLServer/ANSI/SETIMPLICIT TRANSACTIONS

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

对于Azure SQL数据库,如何在默认情况下将隐式_事务设置为ON

编辑

我试过这个:

从对象资源管理器中,我选择数据库,右键单击,新建查询并执行以下脚本:

CREATE TABLE T1 (a INT)
ROLLBACK
SELECT * FROM T1 
结果与预期的一样:无效的对象名称“T1”

现在我点击“更改连接”按钮

我重新连接到同一Azure SQL Server实例

我从数据库组合列表中选择相同的数据库并执行相同的脚本


现在错误是“回滚事务请求没有相应的开始事务。”

我无法重现该问题。首先,我使用以下脚本测试了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
以下结果在SQL Server和Azure SQL数据库(DTU模型)上都是相同的

然后,我在SSMS上将隐式事务配置为默认,对SET implicit_transactions语句进行注释,在测试B、C和D上,我收到了相同的结果


我用SSMS 17.8.1测试了这个。您正在使用哪个版本的SSMS?请从下载最新版本。

我刚刚阅读了文档:

我的SQL server版本是12.0,我在SSMS 17.9和18.1中进行了测试,在
Mydatabase
中运行SQL:

更新:

设置隐式\u事务:

但从文件中可以看出:

  • 由于ANSI默认设置,隐式事务可能意外打开。 有关详细信息,请参阅

    上的隐式\u事务不受欢迎。在大多数情况下 隐式_事务是开启的,这是因为选择了SET ANSI_默认设置为ON

我打开新查询并将ANSI_默认值设置为,它仍然有效:


希望这对您有所帮助

SQL Server Management Studio有一个默认设置隐式事务的选项(Tools/Options/Query Execution/SQL Server/ANSI/SET IMPLICIT TRANSACTIONS),因此当您打开一个新的查询编辑器时,它会自动设置,您无需在其上写入SET IMPLICIT_事务。此选项不适用于Azure数据库。@skysurfer谢谢。我再次测试并更新了我的答案,它仍然有效。@skysurfer,非常奇怪!我尝试断开/重新连接SQL数据库,甚至尝试重新启动SSMS,运行相同的查询,结果总是
无效的对象名称“T1”。
。我将SSMS更新为最新版本。查看我在原始postCould中的编辑。请运行我提供的测试B、C、D,但在运行这些测试之前,请对在这3个测试中找到的所有SET IMPLICIT_事务进行注释。你应该有和我相同的结果。如果我在解决方案资源管理器中右键单击数据库,选择“新建查询”,然后我运行你的测试,我会得到与你相同的结果。在此之后,我单击“更改连接”图标,使用相同的sql server实例,从列表中选择相同的数据库并再次运行脚本,我得到“提交事务请求没有相应的开始事务”。在B.03、C.04之后,D.04I您收到的结果与我的结果相同,这意味着Azure SQL数据库的行为与SQL Server(在我的计算机SQL 2019中)没有差异。关于Azure SQL,您的假设不正确。如果您可以创建一个脚本来证明SQLAzure在SSMS中使用SET IMPLICIT_事务时的行为不同于SQL,请与我们共享,同时我提供的脚本也证明了这一点。
-------- [Test A] ---- OFF ----
[A.01] Now, SET IMPLICIT_TRANSACTIONS OFF.
[A.02] @@TranCount, at start, == 0
[A.03] @@TranCount, after INSERTs, == 0

-------- [Test B] ---- ON ----
[B.01] Now, SET IMPLICIT_TRANSACTIONS ON.
[B.02] @@TranCount, at start, == 0
[B.03] @@TranCount, after INSERTs, == 1
[B.04] @@TranCount, after COMMIT, == 0

-------- [Test C] ---- ON, then BEGIN TRAN ----
[C.01] Now, SET IMPLICIT_TRANSACTIONS ON.
[C.02] @@TranCount, at start, == 0
[C.03] @@TranCount, after INSERTs, == 2
[C.04] @@TranCount, after a COMMIT, == 1
[C.05] @@TranCount, after another COMMIT, == 0

-------- [Test D] ---- ON, INSERT, BEGIN TRAN, INSERT ----
[D.01] Now, SET IMPLICIT_TRANSACTIONS ON.
[D.02] @@TranCount, at start, == 0
[D.03] @@TranCount, after INSERTs, == 2
[D.04] @@TranCount, after INSERTs, == 1
[D.05] @@TranCount, after INSERTs, == 0
SET IMPLICIT_TRANSACTIONS { ON | OFF }