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

Tsql IN子句has参数在存储过程中不起作用,tsql,stored-procedures,sql-server-2017,Tsql,Stored Procedures,Sql Server 2017,我在存储过程的@NameList中有Name作为条件之一 参数声明为@NameList varchar100= 当我用EXEC myProc@NameList='a'这样的字符串执行过程时 该过程不返回任何内容,但当我用硬编码值(如“a”)替换参数时,它成功了 我在SP中放了一个PRINT语句,它精确地打印“a” 这里怎么了 谢谢,请阅读我的评论,但一个解决方案是将逗号分隔的字符串拆分为一个表,然后加入到该表中: declare @list varchar(max) = '13,14,15

我在存储过程的@NameList中有Name作为条件之一

参数声明为@NameList varchar100=

当我用EXEC myProc@NameList='a'这样的字符串执行过程时 该过程不返回任何内容,但当我用硬编码值(如“a”)替换参数时,它成功了

我在SP中放了一个PRINT语句,它精确地打印“a”

这里怎么了


谢谢,

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

   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)

寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小的、完整的和可验证的示例。错误的是IN子句要求检查一个值列表,但您只提供一个字符串作为输入。@marc_的IN语句将使用一个值。例如,在“拉尔夫”中的用户名可以正常工作。你不应该,但你可以。@marc_s虽然我同意,但如果Lys将此方法用于逗号分隔的列表,它将不起作用,因为逗号将是字符串的一部分,它将失败。看起来你正在朝着这一点发展,所以我现在提供这个建议。要解决向SQL Server传递多个值的问题,最好的方法是使用一种设计用于保存多个值(理想情况下为表值参数)的类型。不太理想的是XML或JSON。您试图在一个字符串中传递多个值,这将使自己陷入这个问题。