当我运行此查询时
SELECT CustomerId FROM Stocks.dbo.Suppliers
它给了我这个错误。无效的列名“ CustomerId”。此错误是有效的,因为“供应商”表中没有“客户ID”列;但是当我在子查询中使用相同的查询时,它没有给出任何错误信息,例如
SELECT * FROM SomeOtherDb.dbo.Customer WHERE CustomerId In( SELECT CustomerId FROM Stocks.dbo.Suppliers)
在这里,我期望出现相同的错误“无效的列名”,但是查询运行时没有任何错误。
完全限定的名称仅是约定,两个数据库都位于同一服务器上。
CustomerId确实存在于SomeOtherDb.dbo.Customer表中,但不存在于子查询中。
为什么会这样呢?这与子查询有关吗?
谢谢。
子查询从外部查询继承列。
我猜你的SomeOtherDb.dbo.Customer确实有一个CustomerId列(似乎也可能来自名称)。
然后,这也可能意味着您没有对子查询进行任何操作- 如果子查询中的表没有CustomerId列(看来是这样,否则在以下情况下运行子查询时不会出错)本身),则子查询选择并返回外部CustomerId,由于这是子查询中的唯一列,因此该子查询是无用的。