禁用TSQL脚本检查?

时间:2010-03-29 15:33:13

标签: sql-server tsql

假设我有一个类似的脚本:

if(某些条件) 开始     从某些表中选择一些列 端

可以说,“somecolumn”不存在且条件不正确,这意味着select NOT 已执行。即使不执行select,脚本也无效,Management Studio会抱怨缺少的列“somecolumn”。

问题:我可以以某种方式禁用这种检查,以便执行脚本,因为if不是真的,它永远不会注意到该列丢失了吗?

谢谢: - )

2 个答案:

答案 0 :(得分:4)

使用动态SQL

if(some condition)
begin
    exec ('select somecolumn from sometable') --or sp_executesql
end

因为SQL是什么,所以运行它实际上是没有意义的。它不是逐行执行的:整个批处理一次性解析,并且在此处生成错误,在您意味着任何实际运行之前。这是设计......

答案 1 :(得分:2)

您可以创建一个引用不存在的表的过程,但这是该规则的唯一例外。来自BOL:

  

延迟名称解析只能是   当你引用不存在时使用   表对象。所有其他对象必须   存储过程时存在   被建造。例如,当你   引用一个现有的表   您无法列出的存储过程   该表不存在的列。

除了使用动态SQL之外,没有办法在存储过程中引用不存在的列。