我正在使用基于版本工作的数据库更新脚本。它遵循以下基本格式的每个版本的部分:
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不会阻止服务器查看该代码,并随后向我提供该错误。
如何在不更改任何更新代码(遵循上述格式)的情况下阻止或绕过此操作?
答案 0 :(得分:1)
只需将未编译的代码包装在EXEC ()
:
if (SELECT max(version) FROM DatabaseVersion) < x
exec('INSERT INTO DatabaseVersion ....... (Current Version Number, Description of Change)')
这是一张exec执行了超过128个字符代码的图片:
以下是文档的链接:EXECUTE-Transact-SQL