1

这个问题的评论:

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

因为它与这个答案有关:

SELECT * FROM TABLE WHERE (@vari is null or col = @vari)
  1. 它是否正确?
  2. 是否有一个很好的测试设置,也许在 SQL fiddle 中,可以重现这种现象?(使用这个词很松散)
  3. 这只发生在 WHERE 子句中吗?或者也许只有 AND/OR 运算符?

我问这个是因为我没有在网上找到任何明确说明这一点的东西。

4

1 回答 1

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
于 2012-11-29T21:35:27.783 回答