用这种方法批量删除数据  alter proc deletedata
@data varchar(5000)
as
declare @sql varchar(6000)
if(@data<>'')
begin
set @sql=' delete from c where cid in ('''+@data+''')'
end
exec(@sql)
go
exec deletedata 'c6,c7'    (@data 传入id)

但是我这里的ID 是这样的   589E45AF-7323-4E8D-ADFA-00122E7D0F8F   是36位·····要进行批量删除(有时候数据可能很多)  ,麻烦大哥们帮我 改改我这个存储过程 !

解决方案 »

  1.   


    create function [dbo].[f_split](@SourceSql varchar(8000),@StrSeprate varchar(10))
    returns @temp table(a varchar(100))--实现split功能 的函数
    as
    begin    declare @i int
        set @SourceSql=rtrim(ltrim(@SourceSql))
        set @i=charindex(@StrSeprate,@SourceSql)
        while @i>=1
        begin
            insert @temp values(left(@SourceSql,@i-1))
            set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
            set @i=charindex(@StrSeprate,@SourceSql)
        end
        if @SourceSql<>''
           insert @temp values(@SourceSql)
        returnend一种方法是用以上函数把输入的字符串分割delete from c where cid in (select * from dbo.f_split(@data,','))
      

  2.   


    alter proc deletedata
    @data text
    as
    declare @sql text
    if(@data<>'')
    begin
    set @sql=' delete from c where cid in ('''+@data+''')'
    end
    exec(@sql)
    go
      

  3.   

    你的@data长度只有5000 数据量大的话 你的@data长度也不够。
    可以考虑在程序中控制 循环删除
    也可以用sql的游标来操作
      

  4.   


    exec deletedata 'c6'',''cx'',''c7'