我可以在 SSMS 中删除对“GO”的需求吗?

Jos*_*osh 2 ssms

有没有办法让每条语句立即发送到服务器,或者在 SSMS 中以自己的批次发送?

我正在处理大量语句,在这些语句中我更改表、禁用/启用时间历史记录、更改值等,而 SSMS 似乎在很大程度上阻碍了。如果我在 CLI 中正常运行命令,或者我手动选择并运行,它就可以工作。但是,出于某种原因,在 SSMS 中,我需要go所有内容之间插入语句才能使其正常工作。

例如,添加一列然后随后更新其值,没有go它告诉我列名无效,go它按预期工作。我只能想象 SSMS 正在以某种方式解释命令并与其对表的想法进行比较并导致“错误”——而不是服务器。

我更喜欢go away在整个集合/文件的开头这样的语句,以使其实际按原样运行每一行。这可能吗?

Sim*_*ngs 6

简短的回答是否定的,它不能被关闭。

GO 是一个“批处理终结者”。当 SSMS 执行“语句”时,它们被“批处理”在一起。这可以是单个查询、没有“GO”的整个脚本或可能是“GO”之间的代码。

这就是为什么当您尝试添加列并一次性更新时会收到错误的原因。它们需要作为单独的批次执行。

也有可能,假设您将 3 个语句分成批处理,脚本中的单个批处理可能会失败,但整个脚本不会失败。

Query1 -- success
GO
Query2 -- failed
GO
Query3 -- success
GO
Run Code Online (Sandbox Code Playgroud)

GO 不是 Transact SQL 语句,它是 SSMS 和 sqlcmd 识别的命令。有关更多详细信息,请参阅MSDN 上的此处

您还会发现变量不会在 GO 语句之后持续存在,必须重新声明或修改您的语句/批处理序列。

顺便说一句,您不必使用“GO”作为批处理终止符,您可以使用任何东西。它可以从工具-->选项菜单中的查询执行下进行修改。但请注意,更改它并使用不同的东西仅适用于您正在使用的 SSMS 副本。如果您在团队中工作,并且团队的每个成员都没有更改为使用“NewBatch”关键字,那么脚本将在他们的 SSMS 副本中失败(因为我相当有信心在 sqlcmd 中也是如此!)。