【发布时间】:2019-10-28 11:39:14
【问题描述】:
我可以轻松地为单个值执行存储过程:
EXEC FooStored @ID = 269
但是我怎样才能为列表中的许多值执行相同的存储(我有一个逗号分隔的大约 1000 个常量值的列表,它们来自 SQL 外部)。
我的想法是这样的:
EXEC FooStored @ID IN (269,270,274,280,282,292,300,320,324) -- doesn't work
编辑:由于我无权更改此过程或对此数据库创建新的存储过程,因此我更愿意在查询级别解决此问题,而不是要求某人为我进行所需的更改。
【问题讨论】:
-
最好是table-valued parameter。另一种选择是将分隔列表作为单个字符串传递,然后拆分值。
-
@DanGuzman 我对这两种技术都不熟悉。您介意将您的评论扩展到答案吗?
-
你的 SQL 版本是多少?
-
如果您不想更改现有过程,那么最好的选择是复制当前存储过程并将副本更改为使用表值参数。我知道它有点违反 DRY,但这在 SQL 中通常不如在编程中重要。
-
@Zhorov SQL Server 2016
标签: sql sql-server tsql stored-procedures sql-server-2016