gpt4 book ai didi

SQL Server 2005 - WHERE 子句 - 使用 IF 或 CASE 或 BOOLEAN?

转载 作者:行者123 更新时间:2023-12-02 07:50:36 24 4
gpt4 key购买 nike

我已经研究了这个场景几个小时,但似乎找不到任何直接解决它的东西。

我有很多可选参数传递到存储过程中。我想返回一个没有过滤的记录集,传递给存储过程的一个或多个可选参数。

我正在尝试生成单个查询来执行此操作。

这是我的伪代码(SQL Server 2005):

declare @a varchar(10); set @a = null;
declare @b varchar(10); set @b = 'comm%';

select * from x
where (if @a is not null then col1 like @a)
and (if @b is not null then col2 like @b)

如您所见,我只想在 col1 if 我的参数 (@a) 有数据时进行过滤。同样,我只想过滤 col2 if 我的参数 (@b) 有数据。如果@a 和@b 均为 NULL,则查询应返回所有行。

我发现了几个接近我想要的线程,但它们都没有使用 LIKE 子句进行寻址。

最佳答案

你很接近 - 使用:

SELECT x.*
FROM X x
WHERE (@a IS NULL OR x.col1 LIKE @a)
AND (@b IS NULL OR x.col2 LIKE @b)

但这是 not recommended because it's not sargable . Dynamic SQL将是一个更好的方法:

DECLARE @SQL NVARCHAR(MAX)
SET @SQL = N'SELECT x.*
FROM X x
WHERE 1 = 1 '

SET @SQL = @SQL + CASE
WHEN @a IS NULL THEN ' '
ELSE ' AND x.col1 LIKE @a '
END

SET @SQL = @SQL + CASE
WHEN @b IS NULL THEN ' '
ELSE ' AND x.col2 LIKE @b '
END

BEGIN

EXEC sp_executesql @SQL,
N'@a VARCHAR(10), @b VARCHAR(10)',
@a, @b

END

关于SQL Server 2005 - WHERE 子句 - 使用 IF 或 CASE 或 BOOLEAN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com