2010-03-29 45 views
6

可以说我有一个这样的脚本:禁用TSQL脚本检查?

如果(某些情况) 开始从sometable 结束

比方说 选择somecolumn,即“somecolumn”不存在,条件是不这意味着选择是不是执行。尽管select不会被执行,但脚本无效,Management Studio会抱怨缺少的列“somecolumn”。

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

感谢:-)

+0

如果您不必担心列是否存在,那么您的设计存在严重问题。 – HLGEM 2010-03-30 17:19:13

回答

4

使用动态SQL

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

它实际上是没有意义的,因为SQL就是运行这个。它不是一行一行地执行:整个批处理被一次性解析等,并且在这里产生错误,在任何实际运行之前,你的意思是。这是由设计...

+0

+1,打败了我44秒! – 2010-03-29 15:37:33

+0

不是100% 此代码适用于我: IF OBJECT_ID('Reports.dbo.RecordsTable')IS NULL 但是,只有普通参数字符串指示table1或2的其他方法会失败。 但是,动态sql技巧总是有效,但当然有点烦人。 – regeter 2015-03-12 23:13:51

2

您可以创建一个引用不存在的表的过程,但是该规则是唯一的例外。从BOL:当你引用不存在的 表对象

延迟名称解析只能 使用。在创建存储过程 时,所有其他对象必须存在 。例如,当您在 存储过程中引用 中的现有表时,您不能列出该表不存在的 列。

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