delete a where id in(@ID) @ID类型问题

yanlong521521 2009-12-29 11:23:47
大家好,请教大家个问题:
create procedure proc_table_delete
@IdList varchar(100)
as
delete table where id in (@IdList)
go

id是整型,但@IdList是集合(字符串) 会出现转换成数据类型 int 时失败
如果不拆分字符串来转换整型,要一次性删除有什么好的解决方法吗?
...全文
304 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jenny0810 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jenny0810 的回复:]
引用楼主 yanlong521521 的回复:
大家好,请教大家个问题:
create procedure proc_table_delete
@IdList varchar(100)
as
delete table where id in (@IdList)
go

id是整型,但@IdList是集合(字符串) 会出现转换成数据类型 int 时失败
如果不拆分字符串来转换整型,要一次性删除有什么好的解决方法吗?

楼主可以这样试试你把传入的@IdList变成这种形式,如@IdList=1,2,3
delete table where charindex(','+ltrim(id)+',',','+@IdList+',')>0
[/Quote]修改一下
ck11926375 2009-12-29
  • 打赏
  • 举报
回复
2楼强悍,收藏了!
jenny0810 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 yanlong521521 的回复:]
大家好,请教大家个问题:
create procedure proc_table_delete
@IdList varchar(100)
as
delete table where id in (@IdList)
go

id是整型,但@IdList是集合(字符串) 会出现转换成数据类型 int 时失败
如果不拆分字符串来转换整型,要一次性删除有什么好的解决方法吗?
[/Quote]
楼主可以这样试试你把传入的@IdList变成这种形式,如@IdList=1,2,3
delete table where charindex(','+id+',',','+@IdList+',')>0
yilinkit 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lovexilove 的回复:]
字符串应该是这种类型    (1, 10) 确定输出的是这种类型?
[/Quote]
嗯,我一般也用这种方法。记得字符串前后不要构造逗号
staywithc 2009-12-29
  • 打赏
  • 举报
回复
批量删除:
1,在c#里用循环控制,注意一定要加上事务
2,利用c#生成xml文件,再利用存储过程调用xml批量删除,具体的可以搜一下,有很完整的解决示例
3,把数组转成字符串,再用SQL字符串拼接成如下格式
delete table where id in (1,2,3,4,5,6)
lovexilove 2009-12-29
  • 打赏
  • 举报
回复
字符串应该是这种类型 (1, 10) 确定输出的是这种类型?
yanlong521521 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 silentwins 的回复:]
转换成字符串很难么?
没必要转换成整型啊,字符串就可以了
[/Quote]
目前是用字符串
如 :
delete table where id in(1,2,3,) right
delete table where id in('1,2,3') wrong
目前我的情况就是下面这情况,因为传进来的是字符串
winner2050 2009-12-29
  • 打赏
  • 举报
回复
先执行

CREATE function My_split(@aString varchar(8000),@pattern varchar(10))
returns @temp table([Sid] [int] IDENTITY (1, 1) NOT NULL ,Myvalues varchar(100))
--实现split功能的函数
--说明:@aString,字符串,如“27,28,29”;@pattern,分隔标志,如“ ,”
--使用select Myvalues FROM my_split(字符串, ',')
as
begin
declare @i int
set @aString=rtrim(ltrim(@aString))
set @i=charindex(@pattern,@aString)
while @i>=1
begin
insert @temp values(left(@aString,@i-1))
set @aString=substring(@aString,@i+1,len(@aString)-@i)
set @i=charindex(@pattern,@aString)
end
if @aString<>''
insert @temp values(@aString)
return
end


然后

declare @IdList varchar(100)

set @idList ='1,2,3,4,5,6,7,8,9,9,10'

delete table where id in (select Myvalues FROM my_split(@IdList , ','))

搞完
silentwins 2009-12-29
  • 打赏
  • 举报
回复
转换成字符串很难么?
没必要转换成整型啊,字符串就可以了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧