gpt4 book ai didi

sql-server-2005 - SQL Server 2005 单引号字符串列表失败

转载 作者:行者123 更新时间:2023-12-04 06:28:31 25 4
gpt4 key购买 nike

我有一个具有 nvarchar(max) 的 SP参数 @p1 .这是一个逗号分隔的代码列表,例如100,200,300等等

在 SP 中,我声明了一个变量 @p2 nvarchar(max)并转换 @p1列表成单引号列表

set @p2 = N'''' + replace(@p1,',',''',''') + ''''

当我“选择”时 @p2这将返回正确的 '100', '200', '300'
如果我然后使用 @p2在子选择中,例如
select x,y,z from table1 where id in (@p2) 

我没有返回任何行?如果我修改相同的 SQL 以使用我从上一个选择中获得的相同字符串文字,我会得到行吗?

如何将包含单引号标识符列表的字符串传递给 SP 并在子选择中使用它?我已经广泛地搜索了这个,并且可以将列表转换为 SP 内的临时表并使用它,但我需要使用带引号的列表,以便我可以使用 OPTIMIZE FOR 查询提示。

最佳答案

IN不能以您期望的方式使用逗号分隔的字符串:它被视为单个字符串,而不是隐式值数组。
id IN ('101,102,103')仅在 id 时匹配是精确的字符串 '101,102,103' ,而不是任何单独的分离块。

你应该实现一个 TVF which splits the string并返回它的一组成员并像这样使用它:

SELECT  *
FROM table1
WHERE id IN
(
SELECT value
FROM tvf_split_string('101,102,103')
)

关于sql-server-2005 - SQL Server 2005 单引号字符串列表失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5728031/

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