【问题标题】:in-clause scoping子句范围
【发布时间】:2012-02-14 05:01:18
【问题描述】:

我正在为一家拥有 SQL Server 2008 的公司做一些工作。他们的一个存储过程引用(或似乎引用)一个不存在的列,但没有错误。

查询具有以下结构:

         select col1, col2 from FOO
         where col3 in
         (select id from BAZ where datecreated between @date1 and @date2)

** BAZ 不包含名为 [datecreated] 的列,但 FOO 包含。** 如果我更改查询以限定列名,如下所示,会出现错误:

        select col1, col2 from FOO
         where b in
         (select id from BAZ where BAZ.datecreated between @date1 and @date2)

如果这是设计行为,有人可以指点我相关的文档吗?谢谢

【问题讨论】:

    标签: sql sql-server-2008 scoping in-clause


    【解决方案1】:

    这是设计使然。

    correlated sub query 中的外部查询访问列是完全有效的。在某些情况下,这可能是所需的语义。

    【讨论】:

    • +1 - 不过,为了清楚起见,通常认为用外部查询中的表名限定该列是一种好习惯。
    • @JNK - 是的,如果在 DELETE 中使用,则无法观察到 can lead to empty tables
    猜你喜欢
    • 2011-12-17
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多