在存储过程中使用in参数

感觉现在越来越不愿意写东西了,好多时候都是强撑着写,以便以后自己和别人查找。昨天遇到了在存储过程中需要传递in(1,3,9,23)这种类型的参数,一开始我是这么写的,

decalare @ids varchar(8000)

set @ids='1,3,9,23'

select * from 表名 where id in (@ids)

但是执行了一下,提示在将值 '1,3,9,23'转换成数据类型int时失败。

我又不愿意使用动态sql,总觉得效率不高,我们使用存储过程不就是为了提高运行效率吗?然后从网上找了好长时间,终于找到了一个帖子,觉得不错,就转了过来!

declare @ids varchar(max)

set @ids = '113,114,115,116,128,149,1178,8906,11675'

--select * from wko where id in (@ids)

declare @xmlstr xml

 

set arithabort on

set @xmlstr=convert(xml,'<root><v>' + replace(@ids, ',', '</v><v>') + '</v></root>')

 

select id = N.v.value('.', 'int')  

into #tmp

FROM @Xmlstr.nodes('/root/v') N(v)

 

select * from #tmp

 

原文地址:http://blog.csdn.net/winnyrain/article/details/52934621

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值