存储过程如下create proc testpro
(
@ids varchar(100)
)
as
select * from table where id in(@ids)
要求 在程序中传递多个ID 
sting ids="1,2,3,4,5,6";
如何将ids传递到存储过程中 被存储过程识别呢?

解决方案 »

  1.   

    create proc testpro
    (
    @ids varchar(100)
    )
    as
    declare @sql varchar(1000)set @sql='select * from table where id in('+@ids+')'
    exec(@sql)
      

  2.   

    create proc testpro
    (
    @ids varchar(100)
    )
    asEXEC 'select * from table where id in('+@ids+')'不就完了么
    会不会被怀疑倒粪啊....
      

  3.   

    看我的博客里德http://blog.csdn.net/pigHead_chen/archive/2010/07/20/5750064.aspx
      

  4.   

    cmd.commandText="testpro"                       //调用存储过程名
    cmd.commandType=CommandType.StoredProcedure;    //表明着是一个存储过程SqlParameter oparam;                            //参数化查询
    oparam=new SqlParameter("@id",SqlDbType.char,9);
    ocmd.Parameters.Add(oparam);
    oparam.value="1,2,3,4,5,6";
      

  5.   


    把SQL改造为select into 啊先定义好临时表http://www.w3school.com.cn/sql/sql_select_into.asp
      

  6.   


    create table #tmp(GPA decimal(18,2))
    declare @sql varchar(1000)
    set @sql='insert into #tmp(GPA) select GPA from result'
    exec(@sql)
    select * from #tmp
      

  7.   

    select * from table where id in( select Cast([value] as int) from dbo.fn_Split(@ids, ',') )create function fn_Split(
    @str varchar(1000),
    @sep varchar(10)
    )
    returns @arr table(
    [index] int identity(1,1),
    [value] varchar(20)
    )
    as
    begin
    declare @i int, @tmpStr varchar(50)
    set @i = charindex(@sep, @str) while @i > 0
    begin
    set @tmpStr = substring(@str, 1, @i-1)
    set @str = stuff(@str, 1, @i, '')
    set @i = charindex(@sep, @str)
    insert into @arr([value]) values(@tmpStr)
    end
    insert into @arr([value]) values(@str)
    return
    end
    go
      

  8.   

    参照下面代码改造一下你的代码--将表、列修改为你的表和列--临时表列多个之间用,间隔
    create table #tmp(GPA decimal(18,2))declare @sql varchar(1000)--存储过程传过来的参数,下面两行可以去掉
    declare @ids varchar(100)
    set @ids = '1,2,3,4,5,6'set @sql='insert into #tmp(GPA) select GPA from result where id in ('+@ids+')'
    exec(@sql)
    select * from #tmp--drop table #tmp
      

  9.   

    有一个笨一点的方法
    先写一个分割字符串函数,在调用
    CREATE FUNCTION [dbo].[FN_SPLIT_CODE] (@CODELIST NVARCHAR(4000),@SPLITCODE CHAR(1))
    RETURNS @CODE_LIST TABLE (CODE NVARCHAR(50))
    AS
    BEGIN
    /*
     * 1.SYSTEM  : NSMART
     * 2.DB OWNER    : dbo
     * 3.DESCRIPTION : 以特定字符分解对象列表
     * 4.Author       
                        * 5.IN/OUTPUT  :
     * ------------------------------------------------------------------  *    I/O         Type      PARA NAME              DESCRIPTION
     * ----------  ---------- ---------------  --------------------------  *  [IN]  VARCHAR @CODELIST 对象列表
     *  [IN]    CHAR @SPLITCODE 分割符
     * ------------------------------------------------------------------  *
     * 9.HISTORY :
     * ------------------------------------------------------------------  */

    DECLARE @TEMP_VAR VARCHAR(4000)
    DECLARE @TEMP_INDEX INT

    IF LEN(@CODELIST)>0 AND SUBSTRING(@CODELIST,1,1)='%'
    SET @TEMP_VAR = REPLACE(@CODELIST,'%','')
    ELSE
    SET @TEMP_VAR = @CODELIST

    SET @TEMP_INDEX = CHARINDEX(@SPLITCODE,@TEMP_VAR) WHILE @TEMP_INDEX > 0 
    BEGIN
    INSERT @CODE_LIST
    SELECT SUBSTRING(@TEMP_VAR,0,@TEMP_INDEX) SET @TEMP_VAR = SUBSTRING(@TEMP_VAR,@TEMP_INDEX+1,LEN(@TEMP_VAR)-@TEMP_INDEX) 
    SET @TEMP_INDEX = CHARINDEX(@SPLITCODE,@TEMP_VAR)
    END IF LEN(@TEMP_VAR) > 0
    INSERT @CODE_LIST
    SELECT @TEMP_VAR RETURN
    END
    分割字符串函数网上有很多。这个是我以前用的,是定制的,自动忽略字符串前的'%'然后写存储过程
    create proc testpro
    (
       @ids varchar(100)
    )
    as
    select * from table, [FN_SPLIT_CODE] (@ids,',') where id = CONVERT(INT,CODE)
    大体这样
      

  10.   

    declare @sql nvarchar(max)
    set @sql='select * from table where id in(' +  @id +')'
    exec (@sql)
      

  11.   

    command.CommandText = "delete test where CharIndex( ',' + Cast(fieldname As Varchar) + ',', ',' + @param + ',') > 0";
    SqlParameter param = new SqlParameter();   
    param.ParameterName = "@param";   
    param.Value = "1,2,3,4,5";
    command.Parameters.Add(param);