set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER PROCEDURE [dbo].[BatchDel]

(
@parDelStr varchar
)

AS

  declare @sql varchar    
  set @sql='delete from made where id in ('+@parDelStr+')'  
  exec(@sql)    
RETURN
exec BatchDel '246,245'  这里执行的时候就不能删除,并提示错误说不能删除存储过程D
[/code]

解决方案 »

  1.   

    刚才上述SQL语句原来是漏了声明变量长度,即将  declare @sql varchar    改为   declare @sql varchar(1000)即可。
    可是问题又出来了竟然删除的时候还是删除不了。。返回的是0行的受影响行数。
    我也测试过。。delete from made where id in (246,247)  这个是没有问题的
      

  2.   

    id字段是什么数据类型?
    exec BatchDel '246,245'  这个写法就不对,'246,245'表示一个值而已
    如果id是字符型,应该是'246','245'
    delete from made where id in ('246','245')
    id是数值的
    delete from made where id in (246,245)
      

  3.   

     ('+@parDelStr+')
    这个写法不对,把'去掉
      

  4.   

    据我理解:2楼的这样还是不行哦。。
    exec [dbo].[BatchDel] '"246","247"'  这样写的话还是出现错误
    错误如下:
    消息 105,级别 15,状态 1,第 1 行
    字符串 ')' 后的引号不完整。
    消息 102,级别 15,状态 1,第 1 行
    ')' 附近有语法错误。
      

  5.   

    碰到过类似问题,好象是如果以 varchar传递进去的话,用in 是没办法获得想要的结果的。后来换了个方法,楼主可以参考下
    set @sql='delete from made where id in ('+@parDelStr+')'  
    改为
    set @sql='delete from made where  @parDelStr like '%' +  id + '%'  
    如果ID是int型,就做个转换。
    不过感觉用in的应该有解决的办法,如果楼主不赶的话,到是可以多尝试几种办法,一起研究下
      

  6.   

    declare @sql varchar(1024)//注意这里的长度
       
      set @sql='delete from made where id in ('+@parDelStr+')'  
      

  7.   

    delete from made where id in (246,247)
    楼主,你自己也说了,上面这句话没有问题,
    那说明id是数值型的
    set @sql='delete from made where id in (@parDelStr)'应该修改成这样的还是要把数据类型搞清楚,你之前的写法都是处理字符型的,当然会出问题
      

  8.   

    9楼的。。我是这样的。。我在页面传进去的是一个字符串,形式就像这样string s = "11,12,13" ,然后把这个字符串当成参数传给存储过程,就这样出问题了。不知道我该如何修改。。
    按照9楼的,set @sql='delete from made where id in (@parDelStr),这样还是出错了。。
    错误如下:
    必须声明标量变量 "@parDelStr"。 
      

  9.   

    declare @aa table (xxx)
    然后写方法把你@parDelStr分割存入到@aa 中,最后
    delete from made where id in (@aa)
      

  10.   

    不是告诉你了@sql 你定义的是一个字符而非字符串
      

  11.   

    delete from made where id in (select xxx from @aa)
      

  12.   

    declare @sql varchar 这个长度没有声明,长度最好长点,delete from made where id in (select xxx from table where xxx=条件)