Microsoft SQL 条件语句中的列名无效
Microsoft SQL Invalid Column Name Inside of Conditional Statement
我正在使用基于版本的数据库更新脚本。每个版本都有一个部分,遵循以下基本格式:
if (SELECT max(version) FROM DatabaseVersion) < x
BEGIN
/*CODE*/
INSERT INTO DatabaseVersion ....... (Current Version Number, Description of Change)
END
旧的更新之一是更改列名。今天,当我尝试使用此脚本再次更新数据库时,出现 "Invalid column name" 错误。我已经调试,发现错误发生在无法执行的行上(因为数据库版本已经高于该条件语句中的 "x" 值)。我 运行 一个 SELECT 查询来测试 SELECT 查询是否会执行,但它不会。这向我表明代码在执行之前由 SQL 服务器 "checked over",这意味着条件语句中的 FALSE 不会阻止服务器检查该代码,并随后给我错误。
如何在不更改任何更新代码(遵循上述格式)的情况下防止或绕过此问题?
只需将无法编译的代码包装在 EXEC ()
:
if (SELECT max(version) FROM DatabaseVersion) < x
exec('INSERT INTO DatabaseVersion ....... (Current Version Number, Description of Change)')
这是exec执行了超过128个字符的代码的图片:
这是文档的 link:EXECUTE-Transact-SQL
我正在使用基于版本的数据库更新脚本。每个版本都有一个部分,遵循以下基本格式:
if (SELECT max(version) FROM DatabaseVersion) < x
BEGIN
/*CODE*/
INSERT INTO DatabaseVersion ....... (Current Version Number, Description of Change)
END
旧的更新之一是更改列名。今天,当我尝试使用此脚本再次更新数据库时,出现 "Invalid column name" 错误。我已经调试,发现错误发生在无法执行的行上(因为数据库版本已经高于该条件语句中的 "x" 值)。我 运行 一个 SELECT 查询来测试 SELECT 查询是否会执行,但它不会。这向我表明代码在执行之前由 SQL 服务器 "checked over",这意味着条件语句中的 FALSE 不会阻止服务器检查该代码,并随后给我错误。
如何在不更改任何更新代码(遵循上述格式)的情况下防止或绕过此问题?
只需将无法编译的代码包装在 EXEC ()
:
if (SELECT max(version) FROM DatabaseVersion) < x
exec('INSERT INTO DatabaseVersion ....... (Current Version Number, Description of Change)')
这是exec执行了超过128个字符的代码的图片:
这是文档的 link:EXECUTE-Transact-SQL