条件语句中的Microsoft SQL无效列名称

时间:2017-10-02 19:21:58

标签: sql sql-server conditional

我正在使用基于版本工作的数据库更新脚本。它遵循以下基本格式的每个版本的部分:

if (SELECT max(version) FROM DatabaseVersion) < x
BEGIN
/*CODE*/
INSERT INTO DatabaseVersion ....... (Current Version Number, Description of Change)
END

旧的更新之一是更改列名称。今天,当我尝试使用此脚本再次更新数据库时,我收到了#34;无效的列名称&#34;错误。我已经调试过,发现错误发生在一条无法执行的行上(因为数据库版本已经高于该条件语句中的&#34; x&#34;值)。我运行了一个SELECT查询来测试SELECT查询是否会执行,而不是。这向我表明代码正在被检查&#34;在执行之前由SQL服务器执行,这意味着条件语句上的FALSE不会阻止服务器查看该代码,并随后向我提供该错误。

如何在不更改任何更新代码(遵循上述格式)的情况下阻止或绕过此操作?

1 个答案:

答案 0 :(得分:1)

只需将未编译的代码包装在EXEC ()

if (SELECT max(version) FROM DatabaseVersion) < x
exec('INSERT INTO DatabaseVersion ....... (Current Version Number, Description of Change)')

这是一张exec执行了超过128个字符代码的图片:

enter image description here

以下是文档的链接:EXECUTE-Transact-SQL

enter image description here