如何使用sql过程从单个列传递多个动态值
我的示例表:如何使用sql过程从单个列传递多个动态值,sql,stored-procedures,dynamic,Sql,Stored Procedures,Dynamic,我的示例表: item | id -------+----- mobile | 1 car | 2 pen | 3 我试图创建一个过程,从单个列(item)传递多个动态值,例如:mobile、car等 代码: 错误: 必须以'@name=value'的形式传递参数编号2和后续参数。使用格式'@name=value'后,所有后续参数必须以'@name=value'的形式传递 两件事- 当您编写'exec g_items@im='pen'、'mobile''时,您试图将两个参数传递
item | id
-------+-----
mobile | 1
car | 2
pen | 3
我试图创建一个过程,从单个列(item
)传递多个动态值,例如:mobile、car等
代码:
错误:
必须以'@name=value'的形式传递参数编号2和后续参数。使用格式'@name=value'后,所有后续参数必须以'@name=value'的形式传递
两件事-
上面的代码将执行动态生成的SQL查询。首先,我们必须用单引号将所有逗号括起来,这就是replace语句所做的,然后我们必须用圆括号将整个列表与实际的SQL语句一起括起来,最后执行这个动态SQL语句以获得所需的输出。要执行此过程,请使用以下代码
用您正在使用的数据库标记您的问题。运行此操作时,我遇到相同的错误。您能告诉我如何执行此过程吗?抱歉,我错过了。您可以使用exec g_items@im='pen,mobile'执行它。我也相应地更新了答案。如果您想传递多个值,还可以检查
用户定义表
类型
create procedure g_items
@im varchar(25)
as
select *
from item
where item in (@im)
go
exec g_items @im ='pen','mobile'
create procedure g_items @im varchar(25)
as
declare @sql nvarchar(max)
set @sql = replace(@im,',',''',''')
set @sql = 'select * from item where item in ('''+@sql+''')'
exec sp_executesql @sql
go
exec g_items @im ='pen,mobile'