2011-11-13 75 views
2

我在兩個數據庫中有兩個類似的表。 DB1中的Person_Table1和DB2中的Person_Table2。 我想從DB1中的Person_Table1批量插入到DB2上的Person_Table2。如何在Sql中批量插入

兩個表格中的列名稱是相似的。兩個表中的列數相等也列數很多。怎樣纔可以有一個批量插入像休耕查詢:

insert into DB2.dbo.Person_Table2 (*) (SELECT * FROM DB1.dbo.Person_Table1) 
+1

你有什麼是接近的,但你只需要指定插入列進名單,以及選擇。 IE 插入DB2.dbo.Person_Table2 ( \t名字 \t,姓 \t,中間名 ) SELECT \t名字 \t,姓 \t,中間名 FROM DB1.dbo.Person_Table1 –

+0

@Hiawatha分櫱我知道它,但我的列數很多,我想從選擇使用*也爲許多表做這個 – Ehsan

+2

你不能使用*,因爲表定義可能不匹配加上它是壞習慣進入。可能存在各種其他問題,如移動身份值或來自一個數據庫的外鍵約束不匹配於其他問題。列出列名是正確的方法。 –

回答

1

我總是使用明確的列名 - 只是爲了做這樣一個INSERT時,可以很清楚又安全:

INSERT INTO DB2.dbo.Person_Table2(Col1, Col2, ...., ColN) 
    SELECT Col1, Col2, ...., ColN 
    FROM DB1.dbo.Person_Table1 

這樣,你也可以例如用目標表替換目標表中的一列一個恆定值或SQL函數的值(如GETDATE()或東西)

INSERT INTO DB2.dbo.Person_Table2(Col1, Col2, ...., ColN, ModifyDate) 
    SELECT Col1, Col2, ...., ColN, GETDATE() 
    FROM DB1.dbo.Person_Table1 
+0

我知道這一點,但我的列數很多,我想從'Select *'中使用,我也爲許多表執行此操作 – Ehsan

+0

@ehsanzeynali:我會**不使用'*',因爲這總是容易出錯,其中一個表格的結構由於任何原因而改變......是的,它需要一些打字,但是額外的努力是值得的! –

+0

這是否意味着不存在此操作的任何解決方案? – Ehsan