我试图将变量中的逗号分隔值传递给select语句,但我没有得到结果。
这是 SQL :
DECLARE @dataCodes XML = '<Root>
<List Value="120" />
<List Value="110" />
</Root>';
DECLARE @ConcatString VARCHAR(MAX);
SELECT @ConcatString = COALESCE(@ConcatString + ',','') + Code
FROM (
SELECT T.Item.value('@Value[1]', 'VARCHAR(MAX)') AS Code
FROM @dataCodes.nodes('/Root/List') AS T(Item)
) as TBL
SET @ConcatString=''''+REPLACE(@ConcatString,',',''',''') +'''';
SELECT NAME, ID, ROLE from MyTable where CODE in (@ConcatString); -- not working
输出@ConcatString
注意:
如果我直接传递值,如下所示,我可以看到结果,
SELECT NAME, ID, ROLE from MyTable where CODE in ('110','120');
我正在尝试这个,因为我的SQL结构类似于:
WITH JMATRIX_RESULT AS(
SELECT DISTINCT ... from MyTable1 where CODE in (@ConcatString)
UNION
SELECT DISTINCT ... from MyTable2 where CODE in (@ConcatString)
UNION
SELECT DISTINCT ... from MyTable3 where CODE in (@ConcatString)
),
...
我将参数作为逗号分隔值传递时看到了性能提升。
期望:
如果我将字符串(@ConcatString)中动态创建的逗号分隔值传递给select语句的in子句,它应该返回值。
任何建议都表示赞赏。
答案 0 :(得分:3)
为什么要连接字符串,只需执行以下操作:
DECLARE @dataCodes XML = '<Root>
<List Value="120" />
<List Value="110" />
</Root>';
SELECT NAME, ID, ROLE
from MyTable
where CODE in (
SELECT T.Item.value('@Value[1]', 'VARCHAR(MAX)') AS Code
FROM @dataCodes.nodes('/Root/List') AS T(Item)
);