ani*_*pab 3 stored-procedures sql-server-2008
我有一个存储过程
create PROCEDURE [dbo].[SP] 
(
    @OrderList varchar(500)
)
AS
Begin
    select * 
    from table 
    where id in ('+ @OrderList +')
我在这里通过订单清单....
当我像这样执行
exec sp 'iss005,iss006'
我没有收到数据
但是当我像这样硬编码时......
   select * from table where id in ('iss005','iss006')
然后我得到数据......
谢谢
不幸的是,它不会那样工作.如果您将过程更改为以下内容,则可以使用:
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
仔细查看您的查询,您的ID的值varchar,因此该过程将失败,因为您仍将获得:
WHERE id in (iss005,iss006)
当你想要的时候 :
WHERE id in ('iss005','iss006')
您需要传入引用值,例如:
@OrderList = 'iss005','iss006'
或者计算出一些SQL来分割@OrderList逗号并使用QUOTENAME()函数将引号添加到新变量中.