我正在编写一个存储过程来查询数据库。
将参数传递给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
由于
答案 0 :(得分:1)
您的两个代码段不一样。
if
版本不会更改@SQL_WHERE_QUERY
的值,因为else
语句没有set
。 case
版本将变量设置为NULL
。
在使用if
/ else
设置变量值的特定情况下,if
和case
应该是等效的。
否则,两者完全不同。 if
执行一段代码,因此您可以使用begin
/ end
语句,使用任意复杂的T-SQL代码。 case
仅用于表达式,仅允许select
语句中允许的构造。
就个人而言,我通常会在if
中使用set
,在SQL语句中使用case
。