Sql server 2008 sqlserver2008中的用例

Sql server 2008 sqlserver2008中的用例,sql-server-2008,Sql Server 2008,在尝试根据是否传递了某个值返回适当的结果时,我在使用CASE时遇到了问题 例如,我想运行一个查询,如果通过了 WHEN @suburb <> '' THEN @suburb END = [Suburb] AND [City] = @city 您实际上不需要案例: WHERE (suburb = @suburb OR @suburb = '' OR @suburb IS NULL) AND city = @city 您实际上不需要案例: WHERE (suburb = @sub

在尝试根据是否传递了某个值返回适当的结果时,我在使用CASE时遇到了问题

例如,我想运行一个查询,如果通过了

WHEN @suburb <> '' THEN
@suburb 
END
= [Suburb]
AND 
[City] = @city

您实际上不需要
案例

WHERE (suburb = @suburb OR @suburb = '' OR @suburb IS NULL) AND city = @city

您实际上不需要
案例

WHERE (suburb = @suburb OR @suburb = '' OR @suburb IS NULL) AND city = @city

由于您使用的是SQL Server 2008,因此需要在此处使用
选项(重新编译)
提示,以避免缓存不适当的计划。有关更多详细信息,请参阅

...
WHERE ((@suburb = '') OR (@suburb <> '' AND [Suburb] = @suburb))
    AND [City] = @city
OPTION (RECOMPILE)
。。。
其中((@郊区='')或(@郊区''和[郊区]=@郊区))
和[城市]=@City
选项(重新编译)

由于您使用的是SQL Server 2008,因此需要在此处使用
选项(重新编译)
提示,以避免缓存不适当的计划。有关更多详细信息,请参阅

...
WHERE ((@suburb = '') OR (@suburb <> '' AND [Suburb] = @suburb))
    AND [City] = @city
OPTION (RECOMPILE)
。。。
其中((@郊区='')或(@郊区''和[郊区]=@郊区))
和[城市]=@City
选项(重新编译)

有几种替代方法可以实现,您可以尝试其中一种

WHERE [City] = @city
AND ([Suburb] = @suburb  OR '' = '')

有几种替代方法可以实现,您可以尝试其中一种

WHERE [City] = @city
AND ([Suburb] = @suburb  OR '' = '')
来自Person.vaddationalcontactinfo



来自Person.vaddationalcontactinfo

这很有魅力。这是一个问题,因为我是SQL的新手。我猜OR语句只有在第一个条件失败的情况下才会满足,例如,如果
郊区=@suburban
没有值,那么它只会继续处理
@suburban='
。塔尔说得对吗?不,SQL不会短路。所有的表达式都经过评估。上的文章似乎建议它进行评估,除非我误解了。如果对所有条件都进行了评估,那么所有这些条件是否都可以满足?我不确定这篇文章在哪里暗示短路是有保证的,但事实并非如此,甚至在案例内部也没有。请阅读整个问题及其答案:我站在更正。SQL不能可靠地短路。这里讨论得很好:这很有魅力。这是一个问题,因为我是SQL的新手。我猜OR语句只有在第一个条件失败的情况下才会满足,例如,如果
郊区=@suburban
没有值,那么它只会继续处理
@suburban='
。塔尔说得对吗?不,SQL不会短路。所有的表达式都经过评估。上的文章似乎建议它进行评估,除非我误解了。如果对所有条件都进行了评估,那么所有这些条件是否都可以满足?我不确定这篇文章在哪里暗示短路是有保证的,但事实并非如此,甚至在案例内部也没有。请阅读整个问题及其答案:我站在更正。SQL不能可靠地短路。这里讨论得很好:我绝对不会用第二种形式写它。@Aaron Bertrand-为什么不建议用第二种形式写呢?因为为什么要重复两次
City=@City
子句?@Aaron Bertrand-我在发布后确实考虑过这一点,但是除了重复之外,逻辑不合适吗?不,但是,可能有几十种方法可以编写查询并获得正确的结果。这并不是说所有这些都合适。不要只考虑正确的逻辑甚至性能,还要考虑可读性。我绝对不会用第二种形式来写。@Aaron Bertrand-为什么不建议用第二种形式来写呢?因为为什么要重复两次
City=@City
子句?@Aaron Bertrand-我在发布后确实想过,但是除了重复之外,逻辑不合适吗?不,但是,可能有几十种方法可以编写查询并获得正确的结果。这并不是说所有这些都合适。不要只考虑正确的逻辑甚至性能,还要考虑可读性。