如何将项列表作为参数传递给存储过程

ani*_*pab 3 stored-procedures sql-server-2008

我有一个存储过程

create PROCEDURE [dbo].[SP] 
(
    @OrderList varchar(500)
)
AS
Begin
    select * 
    from table 
    where id in ('+ @OrderList +')
Run Code Online (Sandbox Code Playgroud)

我在这里通过订单清单....

当我像这样执行

exec sp 'iss005,iss006'
Run Code Online (Sandbox Code Playgroud)

我没有收到数据

但是当我像这样硬编码时......

   select * from table where id in ('iss005','iss006')
Run Code Online (Sandbox Code Playgroud)

然后我得到数据......

谢谢

Nei*_*ght 5

不幸的是,它不会那样工作.如果您将过程更改为以下内容,则可以使用:

Create Procedure dbo.SP
    @OrderList varchar(500)
AS

Declare @SQL VarChar(1000)

Select @SQL = 'SELECT * FROM table '
Select @SQL = @SQL + 'WHERE id in (' + @OrderList +')'

Exec ( @SQL)

GO
Run Code Online (Sandbox Code Playgroud)

仔细查看您的查询,您的ID的值varchar,因此该过程将失败,因为您仍将获得:

WHERE id in (iss005,iss006)

当你想要的时候 :

WHERE id in ('iss005','iss006')

您需要传入引用值,例如:

@OrderList = 'iss005','iss006'

或者计算出一些SQL来分割@OrderList逗号并使用QUOTENAME()函数将引号添加到新变量中.