这个小问题如何处理

Kingofcode 2017-01-03 11:04:11
有一存储过程传参
例如

Create Proc fun_A(@ids varchar(100))
as
Select * from table_a where id in(@ids)
---可是此处传的值是这样的 '1,2,3'
---这样就出问题了 sql把他当成一个字符串整体了 不考虑拼接sql语句(语句有点复杂)的情况下有没有简单的办法 解决 而且id为int
...全文
523 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinger126 2017-02-17
  • 打赏
  • 举报
回复
这个多简单的问题。你在过程里面创建一个临时表,只要一个字段就行,然后把传入的参数处理一下,写入这个临时表。接下来就很简单了不用我说了吧
Kingofcode 2017-01-03
  • 打赏
  • 举报
回复
算了 不用存储过程了 直接在后台拼接 简单得多 还好调试
  • 打赏
  • 举报
回复
引用 6 楼 baidu_36457652 的回复:
你传进来是 一个参数 肯定是当成一个字符串
用exec 动态执行应该可以
  • 打赏
  • 举报
回复
你传进来是 一个参数 肯定是当成一个字符串
中国风 2017-01-03
  • 打赏
  • 举报
回复
引用 4 楼 Kingofcode 的回复:
我的参数1,2,3是表示三个ID 用like似乎不合适吧
数据量不大时,也可用 @@IDENTITY--没有影响应该自己用一样用法,不会改,可把那部分语句直接贴出来
Kingofcode 2017-01-03
  • 打赏
  • 举报
回复
我的参数1,2,3是表示三个ID 用like似乎不合适吧
Kingofcode 2017-01-03
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:

Create Proc fun_A(@ids varchar(100))
as
EXEC('Select * from table_a where id in('+@ids+')')
---可是此处传的值是这样的  '1,2,3'
---这样就出问题了 sql把他当成一个字符串整体了 不考虑拼接sql语句(语句有点复杂)的情况下有没有简单的办法 解决  而且id为int
可是实际的语句不是这么简单的 里面还用到了
@@IDENTITY
中国风 2017-01-03
  • 打赏
  • 举报
回复
用动态执行 用Like/patindex..也可以,利用不了索引,效率低些
中国风 2017-01-03
  • 打赏
  • 举报
回复

Create Proc fun_A(@ids varchar(100))
as
EXEC('Select * from table_a where id in('+@ids+')')
---可是此处传的值是这样的  '1,2,3'
---这样就出问题了 sql把他当成一个字符串整体了 不考虑拼接sql语句(语句有点复杂)的情况下有没有简单的办法 解决  而且id为int
0与1之间 2017-01-03
  • 打赏
  • 举报
回复
以前也遇到过类似问题,因为担心SQL注入所以没用动态拼接而是做的分割 看下对你有用么?

select b.Name from (
select val=convert(xml,'<row>'+replace(@str,',','</row><row>')+'</row>')) a 
Cross Apply (Select Name=T.c.value('./text()[1]', 'nvarchar(max)') from a.[val].nodes('//row') as T(c) ) b

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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