このSQL 2005と2008を行うには、効率的な方法がたくさんあります。SQL2000を使用してこれを行う方法があります。
複製されたOrderIdを保持する変数を宣言し、OrderItemDocテーブルに入る複製されたレコードを保持する一時テーブルを作成する必要があります。
ここでは、その方法に関するサンプルコードを示します。 OrderItemDocテーブルの古いOrderItemと新しいOrderItemをリンクするためにシーケンスに依存しています。
CREATE PROCEDURE CloneOrder
(
@OrderId int
)
AS
DECLARE @NewOrderId int
--create the cloned order
INSERT Order(...OrderColumnList...)
SELECT ...OrderColumnList... FROM ORDER WHERE OrderId = @OrderId;
-- Get the new OrderId
SET @NewOrderId = SCOPE_IDENTITY();
-- create the cloned OrderItems
INSERT OrderItem(OrderId,...OrderItemColumns...)
SELECT @NewOrderId, ...OrderItemColumns...
FROM OrderItem WHERE OrderId = @OrderId
-- Now for the tricky part
-- Create a temp table to hold the OrderItemIds and DocumentIds
CREATE TABLE #TempOrderItemDocs
(
OrderItemId int,
DocumentId int
)
-- Insert the DocumentIds associated with the original Order
INSERT #OrderItemDocs(DocumentId)
SELECT
od.DocumentId
FROM
OrderItemDoc od
JOIN OrderItem oi ON oi.OrderItemId = od.OrderItemId
WHERE
oi.OrderId = @OrderId
ORDER BY
oi.OrderItemId
-- Update the temp table to contain the newly cloned OrderItems
UPDATE #OrderItemDocs
SET
OrderItemId = oi.OrderItemId
FROM
OrderItem oi
WHERE
oi.OrderId = @NewOrderId
ORDER BY
oi.OrderItemId
-- Now to complete the Cloning process
INSERT OrderItemDoc(OrderItemId, DocumentId)
SELECT
OrderItemId, DocumentId
FROM
#TempOrderItemDocs
これは、非常にありがとう、トリックを行う必要があります。 – Nick