【发布时间】:2015-11-17 00:07:54
【问题描述】:
我正在尝试在我的查询的where 语句的IN 列表中使用回车分隔的参数列表。
我可以使用replace 函数将列表转换为正确格式的逗号分隔字符串,但是当我将其放入IN 列表时,它什么也不返回。
下面的查询按预期返回逗号分隔的列表。
declare @VarCodes varchar(max)
set @VarCodes = '123-1
123-10
123-100
61
66
67
75'
(select ''''+replace(replace(REPLACE(@VarCodes,char(13),''''+', '+''''),char(32),''),char(10),'')+'''')
'123-1','123-10','123-100','61','66','67','75'
如果我将此文本直接粘贴到下面的查询中,它会按预期返回数据。
select vad_variant_code from variant_detail where vad_variant_code in ('123-1','123-10','123-100','61','66','67','75')
如果我将参数放在in 中,它不会返回任何内容。
select vad_variant_code from variant_detail where vad_variant_code in ((select ''''+replace(replace(REPLACE(@VarCodes,char(13),''''+', '+''''),char(32),''),char(10),'')+''''))
我假设这是因为 IN 需要一个逗号分隔的字符串列表,而 replace 函数返回一个长字符串?
这可以实现吗?
【问题讨论】:
-
1) 动态 SQL 2) 表值参数 3) 表值分割函数 ...
-
想详细说明一下? :)
标签: sql-server tsql