Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/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 2005 SQL Server 2005–;如何将多个插入拆分为。。。如果已知事务中的最大子行数(近似值),则输出选择顶部(z)_Sql Server 2005_Transactions_Insert_Chunks - Fatal编程技术网

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)
我在客户机上建立了关系(C#.NET并使用SQLBulCopy将表复制到SQL Server中的暂存表)

现在我需要在服务器上建立父/子/孙子关系

我有可以做到这一点的脚本(我使用输出语句和Insert语句,并将PK输出到稍后使用的临时表中) 插入子行)

注意,最初我在客户机上建立了孙子和父(项目和订单)之间的外键关系

子订单是作为数量限制引入的(想象一下,作为装运箱中可以容纳的最大项目。所有项目都具有相同的大小–在我的例子中,项目行具有相同的大小。)

主要问题是:我可以在生产表中插入数万个项,我们称它们为orderpsuborderpitemp。我还动态生成临时表:OrderPWithRealPK和suborderWithRealPK,它们保存刚刚插入的父PK

我可以有1个订单、1个子订单和1个项目,很多时候都是这样,或者1个订单、10个子订单,每个子订单中最多有100个项目元素(因此,(n)订单、(m)子订单和(k)项目元素的分布是不可预测的

在下表中,我有以下参数:

  • N=7订单数量-s
  • M=14子订单数量
  • K=23项的数量
  • L=2子订单中的最大项数
  • J=交易中插入的项目的大约数量。(但包含的项目需要属于同一订单,但可以在同一子订单中一起)
p=最大订单中的项目数量。(这可以驱动
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