SQL Server 2008 Management Studio:尽管语法无效,仍意外执行查询
SQL Server 2008 Management Studio 有时会表现出有关语法错误的反直觉行为。 最近的一个案例涉及一个查询在子查询中引用不存在的列(“hs_id”),但查询执行时没有错误。
查询的结构是理解此行为的关键。外部 DELETE
语句以 Photo
表为目标,使用子查询来标识要删除的行。 此子查询从 HotelSupplier
表中选择“hs_id”,其中“id = 142”。
错误在于子查询:HotelSupplier
缺少名为“hs_id”的列;正确的列名称是“hs_key”。 但是,外部查询确实包含“hs_id”(在Photo
表中)。 这允许 SQL Server 将子查询中不明确的“hs_id”引用解析为 Photo
表中的“hs_id”列。
因此,子查询会根据 Photo
表的数据返回一组“hs_id”值,然后使用这些值来过滤 DELETE
操作。 尽管最初存在语法错误,但查询的成功执行源于这种隐式列解析。
这种行为虽然可能令人惊讶,但本质上并不是有问题的。它强调了显式列引用(使用完全限定名称或别名)的迫切需要,以防止歧义并保持数据完整性。
以上是具有无效列引用的 SQL Server 2008 查询如何仍能成功执行?的详细内容。更多信息请关注PHP中文网其他相关文章!