我有什么可能是一个相当不寻常的问题。是否有一个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 工作,但有一个单独的垫打开(在需要分号的工具中)并且只允许自己在那里编写数据操作查询。这会让我非常安心,因为我知道我永远不会错过选择我常用的更新查询。如果我这样做了,它就不会运行,因为它没有分号。
与其依赖分号(错位的分号也可能导致您所描述的问题),不如依赖事务。
将您的查询工具设置为要求提交,如有必要,您将拥有回滚选项。
在 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 而自动打开的事务必须在事务结束时由用户显式提交或回滚。否则,当用户断开连接时,事务及其包含的所有数据更改都会回滚。提交事务后,执行上述语句之一将启动一个新事务。