以上兩句都是將'源表'的數據插入到'目標表',但兩句又有區別的: 第一句(select into from)要求目標表不存在,因為在插入時會自動創建。 第二句(insert into select from)要求目標表存在,由於目標表已經存在,所以我們除了插入源表的欄位外,還可以插入常量,如例中的: ...
select * into 目標表名 from 源表名 insert into 目標表名(fld1, fld2) select fld1, 5 from 源表名
以上兩句都是將'源表'的數據插入到'目標表',但兩句又有區別的:
第一句(select into from)要求目標表不存在,因為在插入時會自動創建。
第二句(insert into select from)要求目標表存在,由於目標表已經存在,所以我們除了插入源表的欄位外,還可以插入常量,如例中的:5。
示例
目前有數據如下:
現在要將id為2的數據複製一條到表中,可用如下語句:
insert into test select * from test where id=2;
結果如圖:
現在要將id為2的數據都複製到表中,同時把其 name 的值改為 'f',可用如下語句:
insert into test(id,name) select id,'f' from test where id=2
結果如圖:
對此,我們就可以擴充下,目前有數據如下:
1:複製表結構及數據到新表
SELECT * INTO 目的資料庫名.dbo.目的表名 FROM 原表名
我們把表 test 的結構和數據複製到新表 test1:
SELECT * INTO test1 FROM test
結果如下:
2.備份表的一部分列(不寫*而寫出列的列表)
SELECT 列名1,列名2,列名3 into 目的資料庫名.dbo.目的表名 from 原表名
我們把表 test1 列 id,name 的數據複製到 test2:
SELECT id,name INTO test2 FROM test1
結果如下:
3.備份表的一部分行(加 WHERE 條件)
SELECT * INTO 目的資料庫名.dbo.目的表名 FROM 原表名 WHERE 條件
我們把 id 為1的數據從test2複製到 test3:
SELECT * INTO test3 FROM test2 WHERE id = 1
結果如下:
4.備份表的一部分列(不寫*而寫出列的列表)和一部分行(加WHERE條件)
SELECT 列名1,列名2,列名3 INTO 目的資料庫名.dbo.目的表名 FROM 原表名 WHERE 條件
我們把在 id 大於0 時,數據表 test1 的列 id,age 的數據複製到 test4:
SELECT id,age INTO test4 FROM test1 WHERE id > 0
結果如下:
5.只複製表的結構
這種情況,我們只要設置查詢條件不成立即可。我們把表 test1 的表結構複製到新表 test5:
SELECT * INTO test5 FROM test1 WHERE 1=2
結果如下:
6.複製的結構數據來源於多個表
其實我們要多個表的查詢結構作為一個數據源就行了,我們先看看表 test2 和 test4 目前的結果和數據:
然後我再把 id 相同下的 id,name,age 數據複製到新表 test6:
SELECT id,name,age INTO test6 FROM (SELECT test2.id,name,age FROM test2 INNER JOIN test4 ON test2.id = test4.id) as a
結果如下: