禁用 SQLCMD 语法检查

Ryu*_*Ryu 5 sql t-sql sql-server validation sqlcmd

我们有时会编写重命名表或列并具有其他复杂逻辑的数据端口脚本。我们还在 IF 语句中使用 SQL 来引用那些旧的列或表。我们有一个标准使用 IF 语句来使我们的 SQL 脚本多运行友好。

但是偶尔,即使 if 语句的计算结果为 false,包裹在块中的代码也会出错,我猜是因为语法检查。

if 1 = 0
begin

   select * from mydatabase.dbo.mytable; -- doesn't execute, but still errors because doesn't exist

end
Run Code Online (Sandbox Code Playgroud)

另一个奇怪的事情是它并不总是一致的,有时它工作正常。

有谁知道我是否可以通过脚本禁用这些类型的检查。

谢谢

笔记

我知道人们会说他们尝试过类似的情况并且没有出错。起初对我来说,它在 SSMS 中没有出错,但在 SQLCMD 中出错了。

sqlcmd MyTestScript.sql -r 1 -U user -P password
Run Code Online (Sandbox Code Playgroud)

然后我将 SSMS 置于 SQLCMD 模式 Query -> CMDMODE 并且它仍然没有给出错误。然后在重新运行几次后,它开始在两者中出错。

Ryu*_*Ryu 1

我认为内置存储过程的execute_sql可以解决这个问题。