如果我将 TSQL 输入到 SSMS 查询编辑器中,我知道我可以通过突出显示一条语句并在键盘上按 F5 来“单步执行”语句(即一次执行一条语句)。
不过,默认情况下,该会话似乎没有打开的事务。每次执行都是提交的。
我可以编写我的 TSQL,使其以 or 开头BEGIN TRAN
并以COMMIT
or结尾ROLLBACK
——这样可以确保在逐步执行时,我可以选择退出更改。
但是我遇到的问题是当我声明变量时。考虑:
declare @flag bit = 0;
select case when @flag = 0 then 'off' when @flag = 1 then 'on' end as FlagCheck;
不管上面是否包含在事务中,如果我自己运行第一个语句,然后自己运行下一个语句,第二个语句将失败,因为变量尚未声明。
是否可以像这样单步执行代码并让 SSMS 理解前面语句(声明变量和赋值)的效果应该延续到下一步?(同样,即使包装在事务中,变量的这种持久化也会失败——即使数据更新的持久化取决于事务解析——提交或回滚)。
每次您从 SSMS 提交文本时,批处理将在完成执行时结束,并且任何变量都将超出范围。
执行此操作的唯一方法是使用调试器,如下所示。然后您可以使用 F10 或 F11 键逐行执行。这应该只在开发环境中使用。
此外(正如@clifton_h 所指出的)此功能已从 SSMS 18.x 中删除,但在最新的 GA 版本(当前为 17.9.1)中仍然可用