需要分号来结束语句的 T-SQL 工具

Joe*_*ool 3 sql-server-2008

我有什么可能是一个相当不寻常的问题。是否有一个T-SQL工具需要用分号来终止语句?我知道在SQL Server 2008 R1 中不需要使用分号,这是我要连接的,但实际上我想被迫使用它来运行更新查询。我相信我们都知道在 sql pad 中间编写如下查询的危险,然后突出显示它并运行它(不幸的是,这是我经常做的事情):

UPDATE dbo.Customers
SET ZipCode = '40223'
WHERE Name = 'Bob Loblaw'
Run Code Online (Sandbox Code Playgroud)

...因为您只需错选一次您的文本即可核对所有客户的邮政编码!

所以,理想情况下,我想继续在SQL Server Management Studio中完成我的大部分 sql 工作,但有一个单独的垫打开(在需要分号的工具中)并且只允许自己在那里编写数据操作查询。这会让我非常安心,因为我知道我永远不会错过选择我常用的更新查询。如果我这样做了,它就不会运行,因为它没有分号。

Red*_*ter 6

与其依赖分号(错位的分号也可能导致您所描述的问题),不如依赖事务。

将您的查询工具设置为要求提交,如有必要,您将拥有回滚选项。

在 SSMS 中,您可以通过选中SET IMPLICIT TRANSACTIONS工具/选项/查询执行/SQL Server/ANSI 下的选项来执行此操作。或者,您可以使用以下命令打开它:

SET IMPLICIT_TRANSACTIONS ON
Run Code Online (Sandbox Code Playgroud)

SET IMPLICIT_TRANSACTIONS (Transact-SQL)

设置为 ON 时,SET IMPLICIT_TRANSACTIONS 将连接设置为隐式事务模式。当关闭时,它将连接返回到自动提交事务模式。

当连接处于隐式事务模式并且该连接当前不在事务中时,执行以下任何语句都会启动一个事务:

ALTER TABLE FETCH REVOKE BEGIN TRANSACTION GRANT SELECT CREATE INSERT TRUNCATE TABLE DELETE OPEN UPDATE DROP

如果连接已在打开的事务中,则语句不会启动新事务。

由于此设置为 ON 而自动打开的事务必须在事务结束时由用户显式提交或回滚。否则,当用户断开连接时,事务及其包含的所有数据更改都会回滚。提交事务后,执行上述语句之一将启动一个新事务。

  • 在工具、选项、查询执行、SQL Server、ANSI、SET IMPLICIT TRANSACTIONS 下检查。 (2认同)