SQL存储一个参数传递多个值问题

在SQL里,做了一个存储,比如:

ALTER PROC HTProc

@bgdate date,

@eddate date,

@wftypeid int,

@wfname varchar(300),

@area varchar(200)

AS

BEGIN

--比如参数@area 我想能传多个值,如下

SELECT * FROM TABLE WHERE 

area in (@area)

这样写我若执行存储时无数据,如:

EXEC HTProc '北京,上海'  --查出无数据

EXEC HTProc '北京'   --单个是有数据

参数@area如何设置呢

=============================

最优的方法是自定义分割字符串函数:

create  function  SplitIn(@c   varchar(2000),@split   varchar(2))    returns   @t   table(col   varchar(20))    as    begin       while(charindex(@split,@c)<>0)        begin          insert   @t(col)   values   (substring(@c,1,charindex(@split,@c)-1))          set   @c   =   stuff(@c,1,charindex(@split,@c),'')        end      insert   @t(col)   values   (@c)      return    end

chyou 发布于 2022-10-13 17:55 (编辑于 2022-10-16 22:28)
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
hu151254Lv4见习互助
发布于2022-10-13 21:39(编辑于 2022-10-13 21:40)

drop PROCEDURE if exists  `NewProc`;

CREATE PROCEDURE `NewProc`(IN `area` varchar(100))

BEGIN

#Routine body goes here...

-- select * from pra where id=area;

set @id = area;

set @sel = 'select * from mt t where t.name in (';

set @sel_2 = ')';

set @sentence = concat(@sel,@id,@sel_2); -- 连接字符串生成要执行的SQL语句

prepare stmt from @sentence; -- 预编释一下。 “stmt”预编释变量的名称,

execute stmt; -- 执行SQL语句

deallocate prepare stmt; -- 释放资源

END;

========================================

call NewProc("'集合类','线程'")

1.把sql拼接为字符串

2.参数必须以有效的SQL格式构造,如  '1','2','3'

  • chyou chyou(提问者) 我的SQL语句有点昨复杂,且参数有多个,且都是一个参数传递多个值的问题。。。这种方式有点复杂 还是感谢
    2022-10-16 22:26 
  • 3关注人数
  • 350浏览人数
  • 最后回答于:2022-10-16 22:28
    请选择关闭问题的原因
    确定 取消
    返回顶部