2016-04-28 79 views
0

当我编写包含in子句的sql语句时,如果in语句中的列不存在,它不会引发错误,但会忽略in语句并返回结果集。下面Azure SQL服务器IN语句不抛出错误

查询将返回从T1

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

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

+0

如下答复中提到的,这不是possible.if你能摄制,你应该用文件CSS – TheGameiswar

+0

的错误只是我V12 SQL Azure数据库测试这一点,并不能重现您问题。你能否添加关于表模式和你正在运行的确切查询的信息? – cbattlegear

回答

0

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

2

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

+0

我知道它应该是,但我可以重现它。如果IN语句中的表没有名为Id的列,并且选择该列,则它将忽略IN语句,除非IN语句中的表没有任何行,则结果集将为空。 –

+0

那么,唯一可以解释的是两个表格的模式不一样。 –