1

我最近更改了我的数据库结构,现在我想从旧表复制到Transfers我刚刚创建的新表(OrdersOrders_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 回答
0
Insert into newtable select * from oldtable      //if same schema
insert into newtable(col1,col2,col3) select col1,col2,col3 from old table  // for different table schema
于 2013-12-24T09:30:27.150 回答