【问题标题】:Disable TSQL script check?禁用 TSQL 脚本检查?
【发布时间】:2010-03-30 02:46:53
【问题描述】:

假设我有一个这样的脚本:

如果(某些条件) 开始 从某个表中选择某个列 结束

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

问题:我能否以某种方式禁用这种检查以便执行脚本,并且由于 if 不正确,它永远不会注意到该列丢失?

谢谢:-)

【问题讨论】:

  • 如果您不得不担心列是否存在,那么您的设计就有严重错误。

标签: sql-server tsql


【解决方案1】:

使用动态 SQL

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

由于 SQL 是什么,运行它实际上是没有意义的。它不是逐行执行的:一次性解析整个批次等,并在此处生成错误,然后再按照您的意思实际运行。这是设计使然...

【讨论】:

  • not 100% 此代码适用于我:IF OBJECT_ID('Reports.dbo.RecordsTable') IS NULL 但是其他仅使用简单参数字符串来指示 table1 或 2 的方法失败。然而动态 sql 技巧总是有效的,但当然有点烦人。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多