100分请教SQL中in参数在存储过程中的传递问题?
比如有一个SQL   
 SELECT   *   FROM   SELTEXT   WHERE   ID   IN   (1,2,3,4)   
 我希望创建一个存储过程 
 比如: 
 CREATE   PROCEDURE   [INSelect] 
             @P_0   NVARCHAR(600)                         
 AS 
             SELECT   *   FROM   SELTEXT   WHERE   ID   IN   (@P_0)   
 创建此存储过程没有问题,执行时总是有错误, 
 请教是什么问题,解决问题200分相送,另不打算使用临时表,有没有其他办法。 
 另: 
 SELECT   *   FROM   SELTEXT   WHERE   ID   IN   (1,2,3,4)   中   1,2,3,4是变量,可以是任意值。。。   
 我把此贴设为100分只是想探讨一下学术上的事情,就是IN是否可以使用参数的问题,因为这个问题一直困扰我,并没有一个明确的答案,通过EXEC只是表面解决了问题,但是还是没有给我一个根本的概念,我并没有程序上无法解决的问题需要大家帮助,谢谢大家的帮助。 
------解决方案--------------------CREATE PROCEDURE [INSelect] 
 @P_0 NVARCHAR(600)  
 AS 
 exec( 'SELECT * FROM SELTEXT WHERE ID IN ( '+@P_0+ ') ')
------解决方案--------------------楼主在C#版问过这个问题吧.   
 我的建议就是把条件值做为一个字符串传到存储过程中,使用字符串拆分函数以次把每个值Insert到一个临时表中,然后使用Select 值 Form 临时表再使用IN.
------解决方案--------------------CREATE PROCEDURE [INSelect] 
     @P_0 NVARCHAR(600)         
 AS 
 begin 
     exec( 'SELECT * FROM SELTEXT WHERE ID IN ( '+@P_0+ ') ') 
 end
------解决方案--------------------CREATE PROCEDURE [INSelect] 
     @P_0 NVARCHAR(600)         
 AS 
     SELECT * FROM SELTEXT WHERE ID IN (@P_0) 
 这个存储过程写的有问题 
 @P_0假设传入的是 1,2,3,4 
 则@P_0的实际值是字符串 '1,2,3,4 ' 
 因此实际查询的是: 
     SELECT * FROM SELTEXT WHERE ID IN ( '1,2,3,4 ') 
 如果ID是int类型。必然会抱错。其他类型的则不会查出结果 
------解决方案--------------------exec( 'SELECT * FROM SELTEXT WHERE ID IN ( '+@P_0+ ') ')
------解决方案--------------------同意1/3楼的方法
------解决方案--------------------也行,     
 CREATE PROCEDURE [INSelect] 
     @P_0 NVARCHAR(600)         
 AS 
 begin 
     SELECT * FROM SELTEXT WHERE charindex( ', '+cast(id as varchar)+ ', ', ', '+replace(@P_0, ', ', ' ' ', ' ' ')+ ', ') >  0 
 end 
------解决方案--------------------CREATE PROCEDURE [INSelect] 
     @P_0 NVARCHAR(600)         
 AS 
 begin 
     declare @sql varchar(100) 
     set @sql =  ', '+replace(@P_0, ', ', ' ' ', ' ' ')+ ', '   
     SELECT * FROM SELTEXT WHERE charindex( ', '+cast(id as varchar)+ ', ',@sql) >  0 
 end
------解决方案--------------------是In不支持这种直接引用.
------解决方案--------------------happyflystone(无枪的狙击手) ( ) 信誉:100    Blog   加为好友   
 方法好,测试了一下,觉得不错:)   
 ------------------------------ 
 declare @sql varchar(100) 
 set @sql =  ',1,3,5,6,8, '   
 SELECT * FROM sysobjects WHERE charindex( ', ' + cast(id as varchar)+ ', ',@sql) >  0
------解决方案--------------------IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE NAME =  'INSelect2 ' AND TYPE =  'P ') 
   DROP PROCEDURE INSelect2