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]
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]
可是问题又出来了竟然删除的时候还是删除不了。。返回的是0行的受影响行数。
我也测试过。。delete from made where id in (246,247) 这个是没有问题的
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)
这个写法不对,把'去掉
exec [dbo].[BatchDel] '"246","247"' 这样写的话还是出现错误
错误如下:
消息 105,级别 15,状态 1,第 1 行
字符串 ')' 后的引号不完整。
消息 102,级别 15,状态 1,第 1 行
')' 附近有语法错误。
set @sql='delete from made where id in ('+@parDelStr+')'
改为
set @sql='delete from made where @parDelStr like '%' + id + '%'
如果ID是int型,就做个转换。
不过感觉用in的应该有解决的办法,如果楼主不赶的话,到是可以多尝试几种办法,一起研究下
set @sql='delete from made where id in ('+@parDelStr+')'
楼主,你自己也说了,上面这句话没有问题,
那说明id是数值型的
set @sql='delete from made where id in (@parDelStr)'应该修改成这样的还是要把数据类型搞清楚,你之前的写法都是处理字符型的,当然会出问题
按照9楼的,set @sql='delete from made where id in (@parDelStr),这样还是出错了。。
错误如下:
必须声明标量变量 "@parDelStr"。
然后写方法把你@parDelStr分割存入到@aa 中,最后
delete from made where id in (@aa)