假设我有一个类似的脚本:
if(某些条件) 开始 从某些表中选择一些列 端
可以说,“somecolumn”不存在且条件不正确,这意味着select NOT 已执行。即使不执行select,脚本也无效,Management Studio会抱怨缺少的列“somecolumn”。
问题:我可以以某种方式禁用这种检查,以便执行脚本,因为if不是真的,它永远不会注意到该列丢失了吗?
谢谢: - )
答案 0 :(得分:4)
使用动态SQL
if(some condition)
begin
exec ('select somecolumn from sometable') --or sp_executesql
end
因为SQL是什么,所以运行它实际上是没有意义的。它不是逐行执行的:整个批处理一次性解析,并且在此处生成错误,在您意味着任何实际运行之前。这是设计......
答案 1 :(得分:2)
您可以创建一个引用不存在的表的过程,但这是该规则的唯一例外。来自BOL:
延迟名称解析只能是 当你引用不存在时使用 表对象。所有其他对象必须 存储过程时存在 被建造。例如,当你 引用一个现有的表 您无法列出的存储过程 该表不存在的列。
除了使用动态SQL之外,没有办法在存储过程中引用不存在的列。