防止脚本在未执行的块中生成错误?

时间:2019-12-10 22:12:23

标签: sql-server tsql schema

if 1=0
begin
    print 'This should not run'
    select NonexistentField from MyTable
end
else
    print 'This should run'

在该代码中,我引用了一个字段,该字段可能取决于情况,也可能不存在。该脚本打算在各种场景中部署,并且在不适用的情况下应该通过条件分支来避免此行。这意味着要通过1 = 0条件进行模拟,这意味着该测试中不存在该字段,因此不要执行使用该字段的代码。

问题是,即使没有执行 select 行,只要存在MyTable,脚本就会抛出一个

  

无效的列名

甚至在运行之前发生错误,并且永远不会显示“这应该运行”消息。

如果另一方面,如果MyTable不存在,则代码可以正常运行,并显示预期的“此应运行”。

从中得出什么意义?

有什么办法可以避免脚本中那些不希望运行的部分产生这些错误?

实际上,我发现自己无法满足条件以指示表中的字段是否存在,因为代码仍然会失败。

1 个答案:

答案 0 :(得分:2)

  

有什么办法可以避免脚本中那些不希望运行的部分产生这些错误?

您需要防止编译无效代码。因此,请使用动态SQL。

if 1=0
begin
    print 'This should not run'
    exec ('select NonexistentField from MyTable')
end
else
    print 'This should run'