1

Transfers最近データベース構造を変更したので、古いテーブルから作成したばかりの新しいテーブルにコピーしたいと思います(OrdersおよびOrders_Transfer):

--old table to copy from
-- table 'Transfers'
CREATE TABLE [dbo].[Transfers] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Date] datetime  NOT NULL,
    [Memo] nvarchar(max)  NULL,
    [Employee_Id] int  NULL,
    [InventoryFrom_Id] int  NOT NULL,
    [InventoryTo_Id] int  NOT NULL,
);

-- new tables to copy to
-- table 'Orders'
CREATE TABLE [dbo].[Orders] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Date] datetime  NOT NULL,
    [Memo] nvarchar(max)  NULL,
    [Employee_Id] int  NULL
);

-- Creating table 'Orders_Transfer'
CREATE TABLE [dbo].[Orders_Transfer] (
    [Id] int  NOT NULL,--foreign key on Orders.Id
    [InventoryFrom_Id] int  NOT NULL,
    [InventoryTo_Id] int  NOT NULL
);

Transfers古いテーブルを反復処理して、その一部をOrders(Date、Memo、Employee) にコピーし、残りをOrders_Transfer(InventoryFrom_Id、InventoryTo_Id)にコピーしたいと考えています。のIdOrders_Transferも FK オンOrders.Idなので、自動生成された値もコピーしたいと思います。scope_identity()関数と句について読みましたOUTPUTが、SQL の初心者であり、すべてをまとめることはできません。

SQL Server 2008 を使用しています

これを行うために必要なクエリは何ですか? どんな助けでも大歓迎です、ありがとう!

4

3 に答える 3

1

OldIdテーブルに列を作成してOrders、古い主キーを格納します。

ALTER TABLE [dbo].[Orders] ADD [OldId] INT;

次に、古いデータをコピーします。

INSERT INTO [dbo].[Orders]
(
[OldId],[Date],[Memo],[EmployeeID]
)
SELECT [Id] AS [OldId],[Date],[Memo],[EmployeeID]
FROM [dbo].[Transfers];

OldId を使用して残りのデータをコピーします。

INSERT INTO [dbo].[Orders_Transfer] 
(
    [Id],
    [InventoryFrom_Id],
    [InventoryTo_Id]
)
SELECT
O.Id, T.[InventoryFrom_Id], T.[InventoryTo_Id]
FROM [dbo].[Orders] O
INNER JOIN [dbo].[Transfers] T
ON O.[OldId] = T.[Id];

列をドロップしOldIdます。

ALTER TABLE [dbo].[Orders] DROP COLUMN [OldId];
于 2013-06-10T19:20:07.213 に答える
0

ID 値の同期を保つには、IDENTITY_INSERT を使用する必要があります。

SET IDENTITY_INSERT dbo.Orders ON;

/* Insert data into the Orders table */
INSERT INTO [dbo].[Orders]
       ([Id]
       ,[Date]
       ,[Memo]
       ,[Employee_Id])
SELECT Id
     , Date
     , Memo
     , Employee_Id
  FROM Transfers;

SET IDENTITY_INSERT dbo.Orders OFF;

/* Insert data into the Orders_Transfer table */
INSERT INTO [dbo].[Ordres_Transfer]
           ([Id]
           ,[InventoryFrom_ID]
           ,[InventoryTo_ID]
SELECT Id
     , InventoryFrom_ID
     , InentoryTo_ID
  FROM Transfers;
于 2013-06-10T19:22:30.940 に答える