sqlserver 存储过程传入参数已逗号区分,执行结果生成程序集循环插入临时表

本文介绍了一个使用SQL存储过程处理复杂查询的例子,并演示了如何通过传入参数进行灵活的数据筛选,最后将查询结果存入临时表中以便进一步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 首先创建存储过程

 --传入参数是类似(‘one,two,three,’)
 create procedure pro_contract(@sum nvarchar(1000))  --pro_contract 为过程名 ,由于要传入的参数大,定义范围为1000
  as
       declare @num int --定义数组初始值
       declare @next int  --剩余字符串
       declare @now nvarchar(30)  --当前截取字符, nvarchar(30) 类型可视情况变
      set @num=1
        while(@num<len(@sum))
   begin

      set @next=charIndex(',',@sum,@num)

if(@next>0)

set @now=cast(substring(@sum,@num,@next-@num) as nvarchar(30))

--下面开始查询语句,已我应用为例如下

SELECT 

a.fld_ContractNo as 合同编号,
e.fld_name as 学生库姓名,
a.fld_QYDate as 签约日期,
d.BAS_A1_40 as 留学国家,
c.BAS_A1_40 as 合同类型,
a.fld_JinE as 合同金额,
n.SYS_A2_20 as 分公司区域,
b.SYS_A1_40 as 咨询顾问,
e.fld_insertDate as 学生库录入时间,
f.SYS_A1_40 as 学生库录入人,
g.BAS_A1_40 as 学生库资源类型,
j.BAS_A1_40 as 途径,
h.BAS_A1_40 as 学生状态,
i.fld_name as 咨询人,
k.SYS_A1_40 as 录入人,
l.BAS_A1_40 as 资源类型,
i.fld_rtm as 录入时间
  FROM [WisewayCPCS].[dbo].[tbl_contract] a
  left join [WisewayCPCS].[dbo].[SYS_A1] b on a.fld_ConsultantID=b.SYS_A1_10
  left join [WisewayCPCS].[dbo].[BAS_A1] c on a.fld_ContractType=c.BAS_A1_30
  left join [WisewayCPCS].[dbo].[BAS_A1] d on a.fld_CountryId=d.BAS_A1_30
  left join [WisewayCPCS].[dbo].[tbl_student] e on a.fld_StudentId=e.fld_studentId
  left join [WisewayCPCS].[dbo].[SYS_A1] f on e.fld_LuRuRenId=f.SYS_A1_10
  left join [WisewayCPCS].[dbo].[BAS_A1] g on e.fld_type=g.BAS_A1_30
  left join [WisewayCPCS].[dbo].[BAS_A1] h on e.fld_status=h.BAS_A1_30
  left join [WisewayCPCS].[dbo].[tbl_DianHuaJiLu] i on cast(e.fld_studentId as nvarchar)=i.fld_studentIds
  left join [WisewayCPCS].[dbo].[BAS_A1] j on i.fld_tujing=j.BAS_A1_30
  left join [WisewayCPCS].[dbo].[SYS_A1] k on i.fld_rby=k.SYS_A1_10
  left join [WisewayCPCS].[dbo].[BAS_A1] l on i.fld_type=l.BAS_A1_30
  left join [WisewayCPCS].[dbo].[SYS_R1] m on a.fld_ConsultantID=m.SYS_R1_10
  left join [WisewayCPCS].[dbo].[SYS_A2] n on m.SYS_R1_20=n.SYS_A2_10

  where fld_ContractNo like '%'+@now+'%'   --@now就是符合查询条件的字符


set @num=@next+1  --循环查询下一个字符

    end
else

      break

end

二 创建临时表

create table #tmp(
列名1 nvarchar(30),
列名2 nvarchar(30),
......

)

三 插入临时表

--在插入之前要先清空临时表数据

delete from #tmp

--然后执行存储过程插入临时表

insert into #tmp exec pro_contract (WH1UK28024,CD1AU28035,GM3UK28092,) --()内为自己要传入的参数值

--查询结果

select * from #tmp


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值