在哪里 - 运营顺序

时间:2012-11-29 21:32:36

标签: sql-server sql-server-2008-r2 operator-precedence

this问题中的评论:

  

不要依赖短路......可以按SQL Server认为合适的任何顺序评估这些子句。

与此答案有关:

SELECT * FROM TABLE WHERE (@vari is null or col = @vari)
  1. 这是对的吗?
  2. 是否有一个好的测试设置,也许是在SQL小提琴中,可以重现这种现象? (用得很松散)
  3. 这只发生在WHERE子句中吗?或者只能使用AND / OR运算符?
  4. 我问这个是因为我没有在网上发现明确表明这一点。

1 个答案:

答案 0 :(得分:1)

请阅读

  

http://connect.microsoft.com/SQLServer/feedback/details/537419/sql-server-should-not-raise-illogical-errors

SQLFiddle

样本设置

create table albert(a int NOT NULL,
                        b varchar(23) NOT NULL)
create table stina (a int NOT NULL)
go
insert albert (a, b)
     values (1, '99'),
             (2, 'Gurka'),
             (3, '89')
insert stina (a) values(1), (3), (9), (12)
go

SELECT a.a, a.b + 100
FROM albert a
JOIN stina s ON s.a = a.a