在什么情况下,IF语句应该在SQL中用于CASE

时间:2013-12-05 15:51:41

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

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

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

我似乎无法在任何地方找到SQL IF和CASE语句的优缺点的描述。任何人都可以告诉我为什么我应该使用这些标准中的一个,或者如果我完全走向错误的方向?

方法1:

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

方法2:

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

由于

1 个答案:

答案 0 :(得分:1)

您的两个代码段不一样。

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

在使用if / else设置变量值的特定情况下,ifcase应该是等效的。

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

就个人而言,我通常会在if中使用set,在SQL语句中使用case

相关问题