我的字段ID是int类型,存储过程参数是一串字符串如 1,4,5,6,8
存储过程中:DELETE FROM SEND_ADMINUSER_TAB WHERE fld_id in('+@ID+') 这么写报错,因为fld_id是int类型,传入的是一个字符串1,4,5,6,8 请问如何写这个IN的,小弟存储过程是新手

解决方案 »

  1.   

    你这是动态sql么?
    DELETE FROM SEND_ADMINUSER_TAB WHERE fld_id in(1,4,5,6,8)
    or 
    declare @ID varchar(200)
    set @ID = '1,4,5,6,8'
    exec('DELETE FROM SEND_ADMINUSER_TAB WHERE fld_id in('+ @ID +')')
      

  2.   

    如果你是动态sql的话,就用print把这段sql打出来看看哪里错了,动态sql找错比较麻烦的
      

  3.   

    DELETE FROM SEND_ADMINUSER_TAB WHERE fld_id in(1,4,5,6,8)
      

  4.   


    Create Function [dbo].[StringToTable](@str varchar(1024))
    Returns @tableName Table
    (
       ID int
    )
    As
    --该函数用于把一个用逗号分隔的多个数据字符串变成一个表的一列,例如字符串'1,2,3,4,5' 将编程一个表,这个表
    begin
    declare
    @Index int,
    @TempID int;
    while(@str<>'')
    begin
    set @Index=CharIndex(',',@str);
    if(@Index=0)
    select @TempID=Cast(@str as int),@str='';
    else
    select @TempID=cast(Left(@str,@Index-1) as int),@str=SubString(@str,@Index+1,256);
    insert into @tableName values(@TempID)
    end
    return;
    endDELETE FROM SEND_ADMINUSER_TAB WHERE fld_id in(select ID from dbo.StringToTable(@ID))