200分请教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分相送,另不打算使用临时表,有没有其他办法。 
------解决方案--------------------提供几种方法 
 如果一个SQL语句中   
 select a,b,c from table_name where a in(2,3,4,5) ;   
 如果a是数值型,且2,3,4,5是变化的时候,可以用两种方法来解决这个问题:   
 第一种方法:如果2,3,4,5是固定的个数,比如有四个,可以定义四个变量,如果当其中只有两个变量的话,则把其余的两个变量设置为可能存在的值。   
 第二种方法:可以直接定义个字串,把2 3 4 5 赋值给它,比如说 str= '2,3,4,5 ' 或者 str= '2,3,5 ',然后在SQL语句中直接 in(:str)就可以了。系统会默认的把str当成三个数值或者四个数值来处理。   
 第三种方法:可以用instr来实现,instr( '2,3,4,5 ',to_char(a))> 0 其中  '2,3,4,5 '同样是一个字符串变量。如string str str= '2,3,4,5 '。 即 instr(:str,to_char(a)).   
 OK!   
------解决方案--------------------如果能不在存储过程中使用Exec执行动态语句就不使用. 
------解决方案--------------------proc更重要的一点是减少客户端的代码开发量
------解决方案--------------------procedure减少sql语句的传输量,少占网络带宽,少用传输时间。 
 直接使用sql语句则将sql耦合到程序中。但存储过程也有移植和维护的问题。 
 其实说这么多都是废话,没有完美的方法。你选择一种方法,总能找到它的好处, 
 不选择一种方法,总能找到它的坏处。还是爱咋的咋的,自己心里舒服就行。