为什么我的主查询在子查询返回错误的同时成功运行?

时间:2019-06-20 10:56:48

标签: sql-server tsql

select 1/0 as test查询返回错误“遇到的除以零错误”

但是这个很好用: select count(*) from (select 1/0 as test) subquery

有人可以解释为什么会发生吗?

3 个答案:

答案 0 :(得分:2)

它有效,因为sql server不会从子查询中执行1/0。您只需要计算行数,sql server足够聪明,可以知道这是多余的额外操作。例如,这两个语句不起作用,因为在这种情况下,必须执行1/0

select count(*),test from (select 1/0 as test) subquery group by test

select test from (select 1/0 as test) subquery

答案 1 :(得分:-1)

主查询与子查询作为普通SQL语句进行交互,而子查询是纯粹的数学问题,您不能将其除以零。

使用此网站在线编译您的sql语句:

https://rextester.com/l/sql_server_online_compiler

答案 2 :(得分:-1)

“选择* 1/0作为测试;”该查询将不返回任何错误,它将返回表中值为null的表,因此,如果您将其用作“从(选择1/0作为测试)中的select count(*)中的子查询;它将返回值1因为子查询正在创建一个值为null的表,这意味着count将变为1。 1/0使u为空,而不是sql中的无穷大。