表コピー文(SELECT INTOとINSERT INTO SELECT)


InsertはT-sqlでよく使われる文で、Insert INTO table(field 1,field 2,...)values(value1,value2,...)このような形式はアプリケーション開発に不可欠である.しかし、私たちは開発、テストの過程で、テーブルのコピーが必要な場合によく遭遇します.例えば、table 1のデータの一部のフィールドをtable 2にコピーしたり、table 1全体をtable 2にコピーしたりします.この場合、SELECT INTOとINSERT INTO SELECTテーブルを使用して文をコピーします.
      1.INSERT INTO SELECT文
文の形式は:Insert into Table 2(field 1,field 2,...)select value1,value2,... from Table1
ターゲットテーブルTable 2が存在する必要があります.ターゲットテーブルTable 2は既に存在するため、ソーステーブルTable 1のフィールドを挿入するほか、定数を挿入することもできます.例は次のとおりです.
--1. 
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]

    create TABLE Table2
    (
        a varchar(10),
        c varchar(10),
        d int,
        CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]
    GO
    --2. 
    Insert into Table1 values(' ','asds','90')
    Insert into Table1 values(' ','asds','100')
    Insert into Table1 values(' ','asds','80')
    Insert into Table1 values(' ','asds',null)
    GO
    select * from Table2

    --3.INSERT INTO SELECT 
    Insert into Table2(a, c, d) select a,c,5 from Table1
    GO

    --4. 
    select * from Table2
    GO
    --5. 
    drop TABLE Table1
    drop TABLE Table2

 2.SELECT INTO FROM文
文形式は:SELECT vale 1,value 2 into Table 2 from Table 1
挿入時にテーブルTable 2が自動的に作成され、Table 1で指定したフィールドデータがTable 2にコピーされるため、ターゲットテーブルTable 2が存在しないことが要求されます.例は次のとおりです.
--1. 
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]
    GO

    --2. 
    Insert into Table1 values(' ','asds','90')
    Insert into Table1 values(' ','asds','100')
    Insert into Table1 values(' ','asds','80')
    Insert into Table1 values(' ','asds',null)
    GO

    --3.SELECT INTO FROM Table2 
    select a,c INTO Table2 from Table1
    GO

    --4. 
    select * from Table2
    GO
    --5. 
    drop TABLE Table1
    drop TABLE Table2