【发布时间】:2013-06-11 12:26:00
【问题描述】:
我有两张桌子:
SupplierLocation与列Id | SupplierId | ThirdPartyIdSupplier与列Id | Company
我们使用的是 SQL Server 2008。我正在尝试纠正一些写得不好的查询。例如,即使子查询中的列名不正确(Supplier 表没有 ThirdPartyId),以下查询也会运行而不会引发错误:
SELECT *
FROM SupplierLocation
WHERE SupplierId IN (SELECT ThirdPartyId
FROM Supplier
WHERE Id = @id)
有没有办法在这样的查询中检查子查询是否正确?
谢谢!
【问题讨论】:
-
运行子查询看看返回什么结果?反转 IN/NOT IN 以查看计数是否如您预期的那样受到影响。
-
SupplierLocation 表中必须有一个ThirdPartyId 列,这使得SQL 有效,即使它是荒谬的。除了知道数据模型和知道查询应该做什么之外,没有其他方法可以检测到这一点。
-
@JC。 - 有这样一列 - 请参阅问题中的第一个要点。
-
对。那么有解释为什么 SQL 验证。但是仍然没有找到语法有效但功能损坏的 SQL 的神奇方法。
标签: sql-server-2008 tsql subquery syntax-error in-clause