SQLSEVER使用游标的存储过程把每一个结果集生成一张单据合并成一个表里

每个结果集生成一张单据 ,并且写入到一张表里.

现在要反向钻取每一张单的明细,也就是生成的结果集 那如何读取之前已经生成单据的单号number?

if not object_id(N'Tempdb..#TT') is null

drop table #TT

Create table #TT([id] int,[number] varchar(50),[name] nvarchar(22))

---上面新增一个临时表TT

if not object_id(N'Tempdb..#T') is null

drop table #T

Go

Create table #T([id] int,[name] nvarchar(22))

Insert #T

select 1,N'张三' union all

select 2,N'李四' union all

select 3,N'王五' union all

select 4,N'赵六'

Go

--测试数据结束

--select*from #t

declare @INum char(4)

declare @Num varchar(15)

declare @DifAmount money

SET @INum=RIGHT(CAST(2022*100+1 AS CHAR(6)),4)

--

--创建一个游标

declare my_cursor cursor for     --my_cursor为游标的名称,随便起

select id,name from #T     --这是游标my_cursor的值,这里随便发挥看业务场景

--打开游标

open my_cursor                  --没什么好说的

--变量

declare   @id int               --声明变量  ‘declare’为声明变量 ‘@name’为变量名称 后面为变量类型

declare   @name varchar(50)     --这里是两个变量用来接收游标的值

--循环游标

fetch next from my_cursor into @id,@name  --获取my_cursor的下一条数据,其中为两个字段分别赋值给@id,@name

while @@FETCH_STATUS=0 --假如检索到了数据继续执行

begin

print(@name) --print()打印变量 随便发挥

-----将游标中满足条件的数据写入临时表TT

IF EXISTS (SELECT 1 FROM #T WHERE ISNULL(ID,0)<>0)

BEGIN

SELECT @Num='22010634'

--ISNULL(MAX(RTRIM(NUMBER)),'') FROM Fch (HOLDLOCK) WHERE  NUMBER LIKE RTRIM(@INum)+'%'  --获取单号最大值

IF (@Num='')

SET @Num=RTRIM(@INum)+'0001'

ELSE

SET @Num=CAST(CAST(LEFT(@Num,8) AS INT)+1 AS VARCHAR(15))

INSERT INTO #TT (id, NUMBER, name)

VALUES (@id, @Num, @name)

END

fetch next from my_cursor into @id,@name --获取下一条数据并赋值给变量

end--关闭释放游标

close my_cursor

deallocate my_cursor

---从临时表TT中取数

SELECT * FROM #TT

微信截图_20220309115714.png

柿柿 发布于 2022-3-9 11:57
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
柿柿Lv4初级互助
发布于2022-3-16 08:53

关联具有唯一性的字段

最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-3-9 12:59

没怎么看懂,睡一觉先~~

  • 柿柿 柿柿(提问者) 就是逆操作找明细单据. 比如说有单据 A B C D E F , 把这些单据里同类型的SUM()汇总写进##T里 ,并且生成一个新的单据号 , ##T 有单据1 2 (单据1是ABC汇总的, 单据2是DEF汇总的) .现在就是要反向逆推, 根据单据1,2分别找出对应的明细单据ABCDEFG
    2022-03-10 17:17 
最佳回答
0
北纬六十六度Lv4初级互助
发布于2022-3-9 14:20

你已经循环把数据插入到了#TT,直接查里面的数据不就行了 ,你还要干啥

  • 1关注人数
  • 386浏览人数
  • 最后回答于:2022-3-16 08:53
    请选择关闭问题的原因
    确定 取消
    返回顶部