根据主键ID批量修改状态,主键ID是全球唯一标识列,我用create PROCEDURE sky_UpdMail
    @IsmailDel bit
AS
BEGIN
    declare @mailId varchar(1000)
    set @mailId=''
    update mail set IsmailDel= @IsmailDel  where 
    charindex(','+ltrim(mailId)+',',','+@mailId+',')>0
END
GO
和create PROCEDURE sky_UpdMail
    @mailId varchar(10000),
    @IsmailDel bit
AS
BEGIN
    update mail set IsmailDel= @IsmailDel where mailId in (@mailId)
END
GO
都不行,都报指定了过多的参数,各位大侠,谁能帮我解决,小弟感激不尽

解决方案 »

  1.   

    create PROCEDURE sky_UpdMail
        @IsmailDel bit
    AS
    BEGIN
        declare @mailId varchar(1000)
        set @mailId=''
        update mail set IsmailDel= @IsmailDel  where 
        charindex(','+ltrim(mailId)+',',','+@mailId+',')>0
    END
    GO"郁闷,这句话是干嘛的啊??charindex的后一项是',,',然后后面的大于零在什么情况下可以成立啊?mailId也为空值??"
      

  2.   

    charindex(','+@mailId+',',','+ltrim(mailId)+',')>0
      

  3.   

    我知道命令已成功完成!但是我现在的问题就是我传过来的参数比如是'sdsads,dsadasdas'这样子的,但是我换成'sdsads','dsadasdas'又提示我传的参数过多,如果你们有好的方法可以帮我写一个存储过程,小弟不甚感激
      

  4.   


    你的charindex里面是想要那两个字符串进行比较...
      

  5.   

    执行一个这个看看
    alert PROCEDURE sky_UpdMail
        @mailId varchar(1000),
        @IsmailDel bit
    AS
    BEGIN
        update mail set IsmailDel= @IsmailDel where mailId in (@mailId)
    END
      

  6.   

    那我简单点说吧!一个表中两个字段,一个是主键ID,全球标识类型的,一个状态,bit类型的,现在需要一条存储过程,根据主键ID批量修改状态
      

  7.   

    create PROCEDURE sky_UpdMail
        @mailId varchar(500),---没必要那么长  不要超过8000
        @IsmailDel bit
    AS
    BEGIN
    exec('update mail set IsmailDel= '+ltrim(@IsmailDel)+' where '',''+'+@mailId+''','' like ''%,''+mailId+'',%''')END
      

  8.   

    执行当然可以成功!但是就是调不出来,我程序里面传的是'13237201-3149-4a8e-b79c-4b42270316ee,fec7a99d-0cd5-44d1-afd7-492604731315'这种形式的
      

  9.   

    还是这样试试吧alter PROCEDURE sky_UpdMail
        @mailId varchar(1000),
        @IsmailDel bit
    AS
    BEGIN
        update mail set IsmailDel= @IsmailDel  where 
        charindex(ltrim(mailId),@mailId)>0
    END
    GO