【发布时间】:2014-11-07 13:05:51
【问题描述】:
我需要复制一些主从记录,大致如下:
INSERT INTO Order
(
SupplierId
,DateOrdered
)
SELECT
SupplierID
,DateOrdered
FROM Order
WHERE SupplierId = 10
DECLARE @OrderId int;
Select @OrderId = Scope_Identity;
INSERT INTO OrderItem
(
Quantity
,ProductCode
,Price
,FkOrderId
)
SELECT
Quantity
,ProductCode
,Price
,FkOrderId
FROM OrderItem
WHERE FkOrderId = @OrderId
这行不通。原因是供应商 = 10 有多个订单。那么在供应商 = 10 的每个订单中迭代的最佳方法是什么,添加订单,然后在进入下一个订单记录之前添加相关的子订单项供应商 = 10.我想我说的是批处理,可能是游标,但我是 T-SQL / Store Procedures 的新手。
我将不胜感激上述建议。
谢谢。
编辑
我希望通过一些示例数据来澄清更多信息。
Original Order Table
Id SupplierId DateOrdered
1 10 01/01/2000
2 10 01/01/2000
Original OrderItem Table
Id Quantity ProductCode Price FkOrderId
1 20 X1 100 1
2 10 Y1 50 1
3 30 X1 100 2
4 20 Y1 50 2
Final Order Table
Id SupplierId DateOrdered
1 10 01/01/2000
2 10 01/01/2000
3 10 01/01/2000 (Clone of 1)
4 10 01/01/2000 (Clone of 2)
Final OrderItem Table
Id Quantity ProductCode Price FkOrderId
1 20 X1 100 1
2 10 Y1 50 1
3 30 X1 100 2
4 20 Y1 50 2
5 20 X1 100 3 (Clone of 1, linked to clone Order=3)
6 10 Y1 50 3 (Clone of 2, linked to clone Order=3)
7 30 X1 100 4 (Clone of 3, linked to clone Order=4)
8 20 Y1 50 5 (Clone of 4, linked to clone Order=4)
所以我需要一些帮助,代码可以克隆 Order 和 OrderItem 以实现“最终”表记录。
看来我需要这样做:
For each matching record in "Order"
Clone Order Record
Clone OrderItem Record where FkOrderId = OldOrderId
Next
【问题讨论】:
-
如果你提供一些你想要实现的数据的表格会更好,因为我真的不知道你的表格中有哪些列。
-
@SubqueryCrunch,感谢您的评论。请参阅上面的编辑。
-
看看这个问题,Using merge..output to get mapping between source.id and target.id,以及它的 Linked 部分的例子。
-
OrderItem 更好的表名是 OrderDetail(s) 或 OrderLine(s)。
标签: sql-server sql-server-2008 tsql