2013-06-10 2 views
1

나는 최근에 내 데이터베이스 구조를 변경하고 지금은 새로운 I 방금 만든 사람 (OrdersOrders_Transfer) 내 이전 테이블 Transfers에서 복사 할 :한 테이블에서 다른 테이블로 데이터를 복사하는 데 필요한 쿼리는 무엇입니까?

--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 (날짜, 메모, 직원)이고 나머지는 Orders_Transfer (InventoryFrom_Id, InventoryTo_Id)입니다. IdOrders_Transfer 또한 Orders.Id의 FK입니다. 그래서 자동 생성 값도 복사하고 싶습니다. scope_identity() 함수와 OUTPUT 절에 대해 읽었지 만 저는 SQL 초보자이며 모든 것을 조합 할 수는 없습니다.

저는 SQL Server 2008을 사용하고 있습니다.

이 작업을 수행하는 데 필요한 쿼리는 무엇입니까? 어떤 도움을 주시면 감사하겠습니다.

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

복사 OldId를 사용하여 나머지 데이터 :

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

그런 다음 이전 데이터에 복사 :

답변

1

나는 이전 기본 키를 저장하기 위해 Orders 테이블에 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 열 :

+0

이 아주 교활, 좋아 보인다, – agugglez

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; 
+0

죄송합니다, 덕분에 나는 지금 그것을 시도거야, 그리고 작동하는지 내가 대답으로 표시거야, 나는 내 질문 만에서 분명하지 않다 실현' Orders' 테이블에 이미 더 많은 데이터가 있습니다. 실제로는 새로운 것이 아닙니다. Id를 생성해야합니다. – agugglez

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 
관련 문제