【问题标题】:In what scenarios should IF statements be used over CASE in SQL什么情况下应该在 SQL 中使用 IF 语句而不是 CASE
【发布时间】:2013-12-05 15:51:41
【问题描述】:

我正在编写一个存储过程来查询数据库。

参数被传递给 where 子句的过程。

我似乎无法在任何地方找到关于 SQL IF 和 CASE 语句的优缺点的描述。谁能给我一个理由,为什么我应该使用其中一个而不是另一个,或者如果我完全走错了方向?

方法一:

DECLARE @SQL_WHERE_QUERY NVARCHAR(MAX) = '';
IF @SQL_PARAM IS NOT NULL SET @SQL_WHERE_QUERY = @SQL_WHERE_QUERY + ' AND [COLUMN_NAME] = '''+@SQL_PARAM+''''

方法二:

DECLARE @SQL_WHERE_QUERY NVARCHAR(MAX) = '';
SET @SQL_WHERE_QUERY = CASE WHEN @SQL_PARAM IS NOT NULL THEN ' AND [COLUMN_NAME] = '''+@SQL_PARAM+'''' END

谢谢

【问题讨论】:

    标签: sql select stored-procedures if-statement case


    【解决方案1】:

    你的两个代码sn-ps不一样。

    if 版本不会更改@SQL_WHERE_QUERY 的值,因为没有带有setelse 语句。 case 版本将变量设置为NULL

    在使用if/else设置变量值的具体情况下,ifcase应该是等价的。

    否则,两者完全不同。 if 执行一段代码,因此您可以拥有 begin/end 语句,以及任意复杂的 T-SQL 代码。 case 仅用于表达式,并且只允许在 select 语句中允许的构造。

    就我个人而言,我一般会在 SQL 语句中使用 ifsetcase

    【讨论】:

    • IF 语句中没有 ELSE 的原因是,如果参数为空,我不需要将列包含在查询中。那么一般情况下,IF 语句用于更复杂的情况是吗?
    • @Hiky 。 . .两者完全不同。 if 是 T-SQL 中的控制流语句(它允许“更复杂”的语句)。 case 语句用于查询中的表达式。碰巧这样的表达式可以与set 一起使用,这就是你混淆它们的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2017-09-27
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多