2013-01-02 3 views
0

한 테이블의 데이터를 다른 여러 테이블에 삽입하려고합니다. 첫 번째 삽입은 새 사용자 ID를 작성합니다. 이 새 사용자 ID는 이어지는 삽입에 사용됩니다. 또한 원본 테이블의 사용자 이름을 다른 테이블에 계속 삽입합니다. 아래의 삽입물 체인은 한 명의 사용자를위한 것입니다. 아마도 2,000 명의 사용자가 참여할 것입니다.여러 INSERT를 그룹화하는 방법은 무엇입니까?

커서를 사용하여이를 수행하는 방법에 익숙합니다. 커서가없는 인서트 체인을 수행하는 다른 방법이 있습니까?

insert into table 1 using @username and @firstname from source table 

insert into table 2 using userid generated from table 1 (userid1) 

insert into table 3 using @username and userid1 

insert into table 4 using userid1 
+1

당신은 출력 절을 사용할 수 있습니다 (http://msdn.microsoft.com/en-gb/library/ms177564(v=sql.100). aspx)를 사용하여 삽입을 정렬 할 수 있다면 대량으로 ID를 캡처 할 수 있습니다. – Laurence

+0

나는 output 절을 잘 알고있다. 패션과 같은 것을 의미하는 것이 무엇인지 보여주는 예가 있습니까? – 4thSpace

+1

http://sqlfiddle.com/#!3/89ab3/1 – Laurence

답변

1

당신은 대량으로 생성 된 ID를 캡처 INSERT 문의 Output Clause를 사용할 수 있습니다. 예를 들어

:

Create Table dbo.Source (
    FirstName nvarchar(100), 
    LastName nvarchar(100) 
); 

Create Table dbo.Attrs (
    Id int Identity Not Null Primary Key, 
    Name nvarchar(100) Not Null, 
    DefaultVal nvarchar(100) 
); 

Create Table dbo.Table1 (
    Id Int Identity Not Null Primary Key, 
    FirstName nvarchar(100), 
    LastName nvarchar(100) 
); 

Create Table dbo.Table2 (
    Id int Identity Not Null Primary Key, 
    Table1ID int Not Null Foreign Key References dbo.Table1 (Id), 
    AttrId int Not Null Foreign Key References dbo.Attrs (Id) 
); 

Insert Into dbo.Source Values 
    (N'Mickey', N'Mouse'), 
    (N'Donald', N'Duck'), 
    (N'Goofy', Null); 

Insert Into dbo.Attrs Values 
    ('Size', 'Small'), 
    ('Wings', 'No'); 

Declare @Temp1 Table (Id Int, FirstName nvarchar(100), LastName nvarchar(100)) 
Declare @Temp2 Table (Id int, Table1ID int, AttrId int) 

Insert Into dbo.Table1 
    (FirstName, LastName) 
Output 
    inserted.Id, inserted.FirstName, inserted.LastName 
Into 
    @Temp1 
Select 
    FirstName, LastName 
From 
    dbo.Source 


Insert Into dbo.Table2 
    (Table1ID, AttrId) 
Output 
    inserted.Id, Inserted.Table1ID, Inserted.AttrID 
Into 
    @Temp2 
Select 
    t.Id, 
    a.Id 
From 
    @Temp1 t 
    Cross Join 
    dbo.Attrs a 

Select * From @Temp2 

http://sqlfiddle.com/#!3/31110/3

+0

감사합니다. 관심이있는 경우 후속 질문 : http://stackoverflow.com/questions/14143750/how-to-supply-values-to-sproc-from-table. – 4thSpace

관련 문제