Azure SQL Server IN语句不会抛出错误

时间:2016-04-28 15:32:00

标签: sql-server azure-sql-database

当我编写包含in子句的sql语句时,如果in语句中的列不存在,则不会抛出错误,而只是忽略in语句并返回结果集。

下面的查询将返回T1的所有行

SELECT * FROM T1 WHERE Id IN(SELECT Id FROM T2)

这是SQL Azure的正确行为吗? 我的本地MS SQL服务器抛出一个错误,说该列不存在。

2 个答案:

答案 0 :(得分:2)

坦率地说,你所描述的是不可能的。如果IN语句中的列不存在,Azure将抛出异常。无法返回结果集。目前,SQL Server执行查询的方式与Azure v12的方式之间几乎没有区别。每个都可以生成不同的执行计划,但两者之间基本上没有什么区别。

答案 1 :(得分:0)

这是预期的行为,与Sql Server中的行为相同。基本上,如果子查询中引用的列在子查询的FROM子句引用的表中不存在,但存在于外部查询的FROM子句引用的表中,则查询执行时没有错误。 SQL Server使用外部查询中的表名隐式地限定子查询中的列。 这在此处记录: https://technet.microsoft.com/en-us/library/ms178050(v=sql.105).aspx