gpt4 book ai didi

sql - 具有多个 where 语句的过程

转载 作者:行者123 更新时间:2023-12-03 02:09:07 27 4
gpt4 key购买 nike

有下表

table TableAB(
ColumnA int,
ColumnB nvarchar(50)
)

我需要创建一个返回ColumnAColumnB并采用两个参数的过程(在现实生活中参数数量超过20)。所有搜索都应使用通配符“%”。

procedure has input parameters
@ColumnA int,
@ColumnB nvarchar(50)

我有两种方法

1.

select ColumnA,ColumnB from TableAB
where
ColumnA like
case @ColumnA
when @ColumnA NULL then ColumnA
else '%' + CONVERT(varchar(10),@ColumnA)+'%'
end
and
ColumnB like
case @ColumnB
when @ColumnB NULL then ColumnB
else '%' + ColumnB +'%'
end

2.

 DECLARE @TabWhereConditions TABLE(Id INT IDENTITY(1,1), Condition VARCHAR(MAX))
...
SET @ParamDefenition = '@pColumnA int, @pColumnB nvarchar(50)'

IF(NOT @ColumnA IS NULL)
BEGIN
INSERT INTO @TabWhereConditions(Condition)
VALUES('ColumnA like ' + '''%' + CONVERT(varchar(10),@ColumnA) + '%''')
END
IF(NOT @ColumnB IS NULL)
BEGIN
INSERT INTO @TabWhereConditions(Condition)
VALUES('ColumnA like ' + '''%' + @ColumnB + '%''')
END

DECLARE CondCursor CURSOR FOR
SELECT Condition FROM @TabWhereConditions
OPEN CondCursor

SET @WhereString = ''
FETCH NEXT FROM CondCursor INTO @WhereCondition
WHILE @@FETCH_STATUS = 0
BEGIN
SET @WhereString = @WhereString + @WhereCondition + ' AND '

FETCH NEXT FROM CondCursor INTO @WhereCondition
END

CLOSE CondCursor
DEALLOCATE CondCursor

SET @WhereString = SUBSTRING(@WhereString,1, LEN(@WhereString)-4)

SET @SqlCommand = '
SELECT
ColumnA,
ColumnB
FROM TableAB
WHERE ' + @WhereString


EXECUTE sp_executesql @SqlCommand, @ParamDefenition,
@pColumnA = @ColumnA,
@pColumnB = @ColumnB,

哪种方法更好?第一个或第二个,或者你的建议注意:我需要解决程序可以接受 1 到 20 个参数,每次调用可以获得不同数量的参数的情况

最佳答案

我相信你想使用类似的东西

select ColumnA,ColumnB from TableAB
where (@columnA is null or ColumnA like '%'+CONVERT(varchar(10),@ColumnA)+'%' and
(@columnB is null or ColumnB like '%'+CONVERT(varchar(10),@ColumnB)+'%'

this 中所述Aaron Bertrand 博客文章,使其成为动态 T-SQL 是个好主意。因此,您可以使用sys.sp_executesql来运行上述语句。

关于sql - 具有多个 where 语句的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53155066/

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