Sql server 2005 SQL Server 2005–;如何将多个插入拆分为。。。如果已知事务中的最大子行数(近似值),则输出选择顶部(z)
我有这些暂存表:Sql server 2005 SQL Server 2005–;如何将多个插入拆分为。。。如果已知事务中的最大子行数(近似值),则输出选择顶部(z),sql-server-2005,transactions,insert,chunks,Sql Server 2005,Transactions,Insert,Chunks,我有这些暂存表: 订单(PK=订单ID) 子订单(PK=SubOrderID,FK=OrderID)和 项目(PK=ItemID,FK1=SubOrderID,FK2=OrderID) 我在客户机上建立了关系(C#.NET并使用SQLBulCopy将表复制到SQL Server中的暂存表) 现在我需要在服务器上建立父/子/孙子关系 我有可以做到这一点的脚本(我使用输出语句和Insert语句,并将PK输出到稍后使用的临时表中) 插入子行) 注意,最初我在客户机上建立了孙子和父(项目和订单)之间
- 订单(PK=订单ID)
- 子订单(PK=SubOrderID,FK=OrderID)和
- 项目(PK=ItemID,FK1=SubOrderID,FK2=OrderID)
- N=7订单数量-s
- M=14子订单数量
- K=23项的数量
- L=2子订单中的最大项数
- J=交易中插入的项目的大约数量。(但包含的项目需要属于同一订单,但可以在同一子订单中一起)
J
数量,但仅当我们有较大的订单时)
如果我们有许多小阶s,那么J可以预先确定。(在我们的例子中,大约10)
给定(K)个项目,我希望创建相对相等的元素桶,这些元素可以一次插入到事务中,但要与其父级(最好是祖级父级)一起提交
现在我有一个手动事务,我首先插入一个带有'TR'值的特殊字段(表示'In transaction'),然后对该字段进行插入并使用'00'进行更新
要表示属于订单的所有项目,将插入其他流程,并使用“00”值的特殊字段进行查询。
如果我可以避免这种情况,那就好了。我认为,如果执行自动事务(使用Begin Trans/End Trans),将事务范围设置为子订单级别是可以的
如果我在下面有一个表,我想在保存到项目表中时,将这些订单的项目放在一起(当然,项目PK将使用OUTPUT子句生成):
-1、3、4和5(9项)
-2(9项)
-6、7(4个itmes)
订单可以按任何顺序插入,最好是子订单和项目元素需要按创建顺序插入。
想象一下,我将使用While循环和TOP(Z)以及适当的join查询来选择项(属于父元素和关联子元素的grandchild)
插入到事务中
SeqNo OrderID SubOrder ItemID No. of Items
-----------------------------------------------------------------------------------
01 1 1 100 2
02 1 1 101
====================================================
03 2 2 201 9
04 2 2 202
05 2 3 301
06 2 3 302
07 2 4 401
08 2 4 402
09 2 5 501
10 2 5 502
11 2 6 503
===================================================
12 3 7 601 2
13 3 7 602
===================================================
14 4 8 801 1
===================================================
15 5 9 901 5
16 5 9 902
17 5 10 1001
18 5 10 1002
19 5 11 1201
==================================================
20 6 12 1201 1
==================================================
21 7 13 1301 3
22 7 13 1302
23 7 14 1401
SeqNo OrderID子订单ItemID物料编号
-----------------------------------------------------------------------------------
01 1 1 100 2
02 1 1 101
====================================================
03 2 2 201 9
04 2 2 202
05 2 3 301
06 2 3 302
07 2 4 401
08 2 4 402
09 2 5 501
10 2 5 502
11 2 6 503
===================================================
12 3 7 601 2
13 3 7 602
===================================================
14 4 8 801 1
===================================================
15 5 9 901 5
16 5 9 902
17 5 10 1001
18 5 10 1002
19 5 11 1201
==================================================
20 6 12 1201 1
==================================================
21 7 13 1301 3
22 7 13 1302
23 7 14 1401