IN子句的参数在存储过程中不起作用

时间:2018-07-27 03:57:27

标签: tsql stored-procedures sql-server-2017

在存储过程中,我将“ Name IN(@NameList))作为条件之一。

参数声明为@NameList varchar(100) = ''

当我使用EXEC myProc @NameList='''a'''之类的字符串执行过程时 该过程什么也不返回,但是当我用诸如'a'这样的硬编码值替换参数时,它成功了。

我在SP内放了一个PRINT语句,它精确地打印了'a'

这是怎么了?

谢谢

1 个答案:

答案 0 :(得分:1)

请也阅读我的评论,但一种解决方案是将用逗号分隔的字符串拆分成一个表,然后加入该表:

   declare @list varchar(max) = '13,14,15,13,14,15,13'

   SELECT
      LTRIM(RTRIM(a.b.value('.[1]','VARCHAR(255)'))) Parish
   FROM
     (
      SELECT CAST('<XMLRoot><RowData>' +  REPLACE(@list,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) x)t 
      CROSS APPLY x.nodes('/XMLRoot/RowData')a(b)