gpt4 book ai didi

sql - TSQL 在动态 sql 的 where 子句中使用通配符

转载 作者:行者123 更新时间:2023-12-05 01:38:05 25 4
gpt4 key购买 nike

看起来在带有通配符的条件下使用 LIKE 和动态 sql 中的变量不起作用,尽管它不会给出错误。这是一个例子。

名为代码的列具有 A0B01C02、A0B02C2D05、A0B02C2D05 等值,我正在尝试匹配包含“B1”等子集的行。当我这样做时,它会正常工作并按预期返回结果。

set @sql='select * from table where code like ''%B01%'''
exec sp_executesql @sql

如果我硬编码变量的值 设置@code='B01'并修改 sql 语句以连接引号和通配符:

set @sql='select * from table where code like ' +''''+ '%'+@code + '%' + ''''
exec sp_executesql @sql

这会按预期返回结果,但我必须对变量进行硬编码。但是,当我需要使用 B01 的变量进行匹配并且该变量是使用 select 语句设置的时,我没有得到任何返回结果。我这样定义一个 nvarchar:

set @code=(select top 1 code from anotherTable where USERID=@PersonId)

不过,我确认上面的 select 语句返回了预期的代码。没有错误,但查询“执行成功”。我是否遗漏了 where 子句的语法?

最佳答案

您可以在 http://ask.sqlservercentral.com/questions/275/dynamic-where-clause-how-can-i-use-a-variable-in-an-in-predicate/312#312 找到对此的讨论
我的答案是通过逗号函数进行解析。

/*****************************************************************
**** Parse A Comma Delimited String Into A Table
*****************************************************************/
ALTER FUNCTION [dbo].[ParseByComma] (
@String VARCHAR(600) )
RETURNS @TblSubString TABLE
(
VarSubString VARCHAR(50)
)
AS
BEGIN
DECLARE @intPos INT,
@SubStr VARCHAR(50)

-- Remove All Spaces
SET @String = REPLACE(@String, ' ','')
-- Find The First Comma
SET @IntPos = CHARINDEX(',', @String)
-- Loop Until There Is Nothing Left Of @String
WHILE @IntPos > 0
BEGIN
-- Extract The String
SET @SubStr = SUBSTRING(@String, 0, @IntPos)
-- Insert The String Into The Table
INSERT INTO @TblSubString (VarSubString) VALUES (@SubStr)
-- Remove The String & Comma Separator From The Original
SET @String = SUBSTRING(@String, LEN(@SubStr) + 2, LEN(@String) - LEN(@SubStr) + 1)
-- Get The New Index To The String
SET @IntPos = CHARINDEX(',', @String)
END
-- Return The Last One
INSERT INTO @TblSubString (VarSubString) VALUES (@String)
RETURN
END

关于sql - TSQL 在动态 sql 的 where 子句中使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1639070/

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