日期:2014-05-18  浏览次数:20561 次

存储过程传递参数问题
我在存储过程中要实现类似下面语句的功能
select   *   from   t   where   c   in   (1,2,3,4)
其中in   后面的内容也就是1,2,3,4我想作为参数传递进去
类似于
declare   @p   as   ***
select   *   from   t   where   c   in   @p

问题:
1.这样可以实现吗?
2.@p声明为什么类型?怎样转换?
3.如果这样不切实际,有那些效率较高的替代方法??

各位帮忙啊.....

------解决方案--------------------
1.可以实现
2. varchar 类型

------解决方案--------------------
declare @p varchar(100)
set @p= '1,2,3,4 '
exec ( 'select * from t where c in ( '+@p+ ') ')
------解决方案--------------------
declare @id varchar(1000)
declare @sql nvarchar(4000)
set @id= '1,2,4,5,6,7,8,9,10 '
set @sql=N 'select * from product where proid in ( '+@id + ') '
exec sp_executesql @sql
------解决方案--------------------
CREATE PROCEDURE my_proc
@p varchar(100)
AS
exec( 'select * from t where c in ' + @p)
GO

exec my_proc '(1,2,3,4) '