注册 登录
编程论坛 SQL Server论坛

根据多选的id循环删除多条记录,执行这个存储过程怎么写?

sw4433 发布于 2010-06-28 16:58, 3193 次点击
存储过程
根据多选的id循环删除多条记录
ALTER PROCEDURE [dbo].[news_DeleteBy_N_Id]
@id varchar --(id为在news表中为int类型,但需要根据id循环删除,所以设置为varchar)
AS
BEGIN
    delete news where id in (@id)
END

执行这个存储过程怎么写?
exec news_DeleteBy_N_Id ?????  这里怎么写参数:例如删除多条记录 id为: 100049 ,100050,100051,100052

exec news_DeleteBy_N_Id ('100049 ,100050,100051,100052')
老是报语法错误
6 回复
#2
cnfarer2010-06-28 17:18
这才是正确的语句:
delete from news where id in ('100049' ,'100050','100051','100052')
可以先生成一个如上的SQL语句,再执行之。


[ 本帖最后由 cnfarer 于 2010-6-28 17:20 编辑 ]
#3
sw44332010-06-28 17:22
以下是引用cnfarer在2010-6-28 17:18:41的发言:

这才是正确的语句:
delete from news where id in ('100049' ,'100050','100051','100052')
可以先生成一个如上的SQL语句,再执行之。
我知道用delete from news where id in ('100049' ,'100050','100051','100052')
可以删除成功

但是我想写在存储过程里面,效率高点

exec news_DeleteBy_N_Id ?? 这里怎么写?
#4
cnfarer2010-06-28 20:09
调用时@id的内容为:'100049' ,'100050','100051','100052'即包含多个'的字符类型
#5
sw44332010-06-28 22:28
如果这样的话就错了

exec news_DeleteBy_N_Id '100049' ,'100050','100051','100052'

为过程或函数 news_DeleteBy_N_Id 指定了过多的参数。
#6
sw44332010-06-29 09:03
直接写在sql语句里面我会,
但用存储过程写就报错

exec news_DeleteBy_N_Id '100049' ,'100050','100051','100052'

为过程或函数 news_DeleteBy_N_Id 指定了过多的参数。

用存储过程怎么写参数啊?
没人知道吗?
#7
aei1352010-06-29 09:45
试试这个
ALTER PROCEDURE [dbo].[news_DeleteBy_N_Id]
@id varchar(200) --(id为在news表中为int类型,但需要根据id循环删除,所以设置为varchar)
AS
BEGIN
    Declare @sql nvarchar(500)
    set @sql='delete from news where id in('+@id+')'
    exec (@sql)
END

exec news_DeleteBy_N_Id '100049,100050,100051,100052'
1