【发布时间】:2018-07-27 03:57:26
【问题描述】:
我在存储过程中有“Name IN (@NameList))”作为条件之一。
参数声明为@NameList varchar(100) = ''
当我使用 EXEC myProc @NameList='''a''' 之类的字符串执行程序时
该过程不返回任何内容,但是当我将参数替换为像'a' 这样的硬编码值时,它成功了。
我在 SP 中放了一条 PRINT 语句,它准确地打印出 'a'
这里有什么问题?
谢谢,
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
-
问题是
IN子句需要一个 值列表 进行检查,但您只提供了一个 单个字符串输入。 -
@marc_s IN 语句将使用单个值。例如,('ralph')中的用户名可以正常工作。不是你应该,但你可以。
-
@marc_s 虽然我同意,但如果 Lys 将此方法用于逗号分隔的列表,它将不起作用,因为逗号将是字符串的一部分,将会失败。
-
看来您正在朝着这一点前进,所以我现在提供这个建议。解决希望将多个值传递给 SQL Server 的问题的最佳方法是使用 设计 类型来保存多个值(理想情况下,表值参数。不太理想的是 XML 或 JSON)。您正在将 yourself 推入这个问题,而是尝试在 string 中传递多个值。
标签: tsql stored-procedures sql-server-2017