Sql server TSQL中的IF条件表达式求值
在像C#这样的编程语言中,java如果一个条件有多个带有AND(&&)运算符的表达式,那么只有当第一个表达式为true时,才会计算第二个表达式 那么在TSQL中呢?具体来说,这是Microsoft Sql server中存储过程中的一个条件Sql server TSQL中的IF条件表达式求值,sql-server,tsql,if-statement,expression,Sql Server,Tsql,If Statement,Expression,在像C#这样的编程语言中,java如果一个条件有多个带有AND(&&)运算符的表达式,那么只有当第一个表达式为true时,才会计算第二个表达式 那么在TSQL中呢?具体来说,这是Microsoft Sql server中存储过程中的一个条件 IF (exprA AND exprB) 在上述情况下,如果exprA为false,那么exprB是否会被计算?如果第一个表达式为false,您不能依靠SQL Server不计算第二个表达式。参见我对Martin在其评论中链接的问题的回答。案例语句似乎允许
IF (exprA AND exprB)
在上述情况下,如果exprA为false,那么exprB是否会被计算?如果第一个表达式为false,您不能依靠SQL Server不计算第二个表达式。参见我对Martin在其评论中链接的问题的回答。案例语句似乎允许短路,如下例所示:
-- Conditional Query
select case when 1>0 and 1/0>0 then 1 else 0 end
-- Short Circuited Conditional Query
select case when -1>0 and 1/0>0 then 1 else 0 end
正如其他人所指出的,这取决于你的假设条件是什么。但是,如果只使用简单的表达式,它将短路。运行以下命令,您将看到第二个表达式中从未出现过被零除的错误:
IF (1 = 0 AND (1/0) = 0)
BEGIN
PRINT 'test1'
END
ELSE
BEGIN
PRINT 'test2'
END
“视情况而定”。如果它包含
EXISTS
子查询,那么几乎总是不会发生短路。你永远不能指望它发生。您可以嵌套CASE
表达式,也可以嵌套IF
表达式来保证它。如果有人想看一些额外的案例!我认为你是对的,而不是依赖它,我应该使用嵌套的if或case。谢谢你提供的信息。
create proc ABCDemo1
(
@Name varchar(50),
@date varchar(50)
)
as begin
if(@Name!='' and @date='')
begin
select * from Table1 where condition1
end
else if(@Name='' and @date!='')
begin
select * from Table2 where condition2
end
else if(@Name!='' and @date!='')
begin
select * from Table3 where condition3
end
end