Sql server 循环中的MS SQL循环
我有两个表——一个叫做#final,有很多客户数据(所有信息的组合)。十几列左右-Sql server 循环中的MS SQL循环,sql-server,loops,insert,cursor,Sql Server,Loops,Insert,Cursor,我有两个表——一个叫做#final,有很多客户数据(所有信息的组合)。十几列左右-名、中名、姓、地址、与会者等。我还有第二张表 create table #diff_temp ( customer_no int, num_reception int, num_guests int, diff int ) 第二个表中填充客户ID、总接待和客票的方式,以及diff=接待客人之间的差异 我需要做的是运行一个循环,并将名称、地址信息插入到#final中,即每个记录的差异次数 比如说 #diff_Tem
名、中名、姓、地址、与会者等。我还有第二张表
create table #diff_temp
(
customer_no int,
num_reception int,
num_guests int,
diff int
)
第二个表中填充客户ID、总接待和客票的方式,以及diff=接待客人之间的差异
我需要做的是运行一个循环,并将名称、地址信息插入到#final中,即每个记录的差异次数
比如说
#diff_Temp
的数据如下所示
customer_no num_reception num_guests diff
1 5 1 4
2 12 10 2
3 3 1 2
4 32 20 12
5 12 10 2
6 8 6 2
我需要做的是,客户1有一个循环,循环运行4次,数据输入4次到#final
。对于客户2,循环将运行2次,对于客户4,循环将运行12次,依此类推
对于每个客户,循环运行diff列中值的数量倍。然后,循环根据一个大型sql查询将数据插入到#final中
我似乎不知道如何使光标或循环在这里工作
这是我得到的脚本-它运行但不做任何事情。
当我运行内部游标时,它只接受行数(6)并输入每行6次。不是我想要的
最新更新的脚本:
DECLARE @Iteration INT = 1 -- Loop
DECLARE @diff INT = 1 -- Cursor
DECLARE @owner_customer_no INT -- Cursor
BEGIN
DECLARE loop_cursor CURSOR FOR
SELECT owner_customer_no, diff
FROM #diff_temp
OPEN loop_cursor
FETCH NEXT FROM loop_cursor INTO @owner_customer_no, @diff
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Iteration = 1
WHILE @Iteration <= @diff
BEGIN
insert into #final
select distinct
e.customer_no,
0 as guest_cust_no,
h.fname,
...
where e.campaign_no = 1119
and sc.coding_scenario = 2
PRINT @Iteration
PRINT @diff
PRINT @owner_customer_no
SET @Iteration = @Iteration + 1
END
FETCH NEXT FROM loop_cursor INTO @owner_customer_no, @diff
END
CLOSE loop_cursor
DEALLOCATE loop_cursor
END
每个迭代/循环插入6行-我希望它插入1行 当您声明变量@diff
时,其值为空
然后立即尝试在循环中使用它:
DECLARE @diff INT, @owner_customer_no INT -- Cursor
WHILE @Iteration <= @diff
,以便它对#diff_temp
中的每一行执行
编辑2:
在这一行之后,
FETCH NEXT FROM loop_cursor INTO @owner_customer_no, @diff
将@Iteration
设置回1,这样内部循环将正确执行#diff_temp
中的下一行,为什么您认为您无法找到它?你试过什么代码,又犯了什么错误?@TabAlleman-我试过了,有几件事让我陷入困境。我已经在问题中添加了代码。从发布的内容来看,这里根本不需要任何循环。这只是插入可以而且应该避免循环的数据。我已将@diff更新为从1开始-循环现在运行,但仍然不准确。请参阅我的编辑。把你的外循环放在光标里,把你的插入放在里面。我做了改变,它运行了很长时间。我想我碰到了某种无限循环。。。在Fetch_status=0时获取光标,在迭代时开始编辑问题并显示长时间运行的新代码。也许你不小心删除了一些重要的东西。它需要在循环中开始/结束。我添加了它,它运行了——它似乎给了我正确的打印数据。但还是有问题——给定的客户ID的迭代量为4,它在每次迭代中插入所有6行。CustomerID1使用6条客户记录进行1次迭代,所有6条客户记录进行第二次迭代,以此类推。我正在随时更新代码。
WHILE @Iteration <= @diff
BEGIN
...
SET @Iteration = @Iteration + 1
END
FETCH NEXT FROM loop_cursor INTO @owner_customer_no, @diff