sql – 为什么子查询中的“列名无效”XYZ错误?虽然列名不在子查表中?

前端之家收集整理的这篇文章主要介绍了sql – 为什么子查询中的“列名无效”XYZ错误?虽然列名不在子查表中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我运行这个查询
SELECT CustomerId FROM Stocks.dbo.Suppliers

它给我这个错误.无效的列名称“CustomerId”.此错误是有效的,因为“供应商”表中没有列CustomerId;但是当我在子查询中使用相同的查询时,它不会给出任何错误,例如.

SELECT * 
  FROM SomeOtherDb.dbo.Customer 
 WHERE CustomerId In( SELECT CustomerId 
                        FROM Stocks.dbo.Suppliers)

这里我期待同样的错误“无效的列名称”,但查询运行没有任何错误.

完全限定名称只是惯例,dbs都在同一台服务器上.

CustomerId确实存在于SomeOtherDb.dbo.Customer表中,但不存在于子查询中.

为什么是这样的行为?这是什么与子查询

谢谢.

解决方法

查询从外部查询继承列.

我猜你的SomeOtherDb.dbo.Customer有一个CustomerId列(这似乎也是名字).

这也可能意味着您没有使用子查询来处理您想要执行的操作 – 如果子查询中的表不具有CustomerId列(并且似乎如此,否则在运行子查询时不会出现错误本身),则子查询选择并返回外部CustomerId,并且由于这是子查询中唯一的列,因此子查询是无用的.

猜你在找的MsSQL相关文章