Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 循环中的MS SQL循环_Sql Server_Loops_Insert_Cursor - Fatal编程技术网

Sql server 循环中的MS SQL循环

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

我有两个表——一个叫做#final,有很多客户数据(所有信息的组合)。十几列左右-
名、中名、姓、地址、与会者等。我还有第二张表

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