คัดลอกข้อมูลลงในตารางอื่น


154

วิธีการคัดลอก / ผนวกข้อมูลจากตารางหนึ่งไปยังอีกตารางที่มีสคีมาเดียวกันใน SQL Server ได้อย่างไร

แก้ไข:

สมมติว่ามีแบบสอบถาม

select * 
into table1 
from table2 
where 1=1 

ซึ่งสร้างด้วยสคีเดียวกันเช่นเดียวกับข้อมูลในขณะที่table1table2

มีแบบสอบถามสั้น ๆ เช่นนี้เพื่อคัดลอกข้อมูลทั้งหมดเท่านั้นลงในตารางที่มีอยู่แล้ว?


สำหรับข้อมูลที่สมบูรณ์โปรดระวังคำสั่งนี้อย่าคัดลอกดัชนีและทริกเกอร์ของตาราง! ดูโพสต์ต่อไปนี้สำหรับดัชนีการคัดลอกและสคริปต์ทริกเกอร์: stackoverflow.com/questions/7582852/…
HausO

วิธีแก้ปัญหานี้ INSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

คำตอบ:


310

หากทั้งสองตารางเป็นสคีเดียวกันอย่างแท้จริง:

INSERT INTO newTable
SELECT * FROM oldTable

มิฉะนั้นคุณจะต้องระบุชื่อคอลัมน์ (รายการคอลัมน์newTableเป็นตัวเลือกหากคุณกำลังระบุค่าสำหรับคอลัมน์ทั้งหมดและเลือกคอลัมน์ตามลำดับเดียวกับnewTableสคีมาของ):

INSERT INTO newTable (col1, col2, col3)
SELECT column1, column2, column3
FROM oldTable

1
จะทำอย่างไรถ้าฉันต้องการเข้าblank dataคอลัมน์?
ฮัด

3
@coder เป็นเพียงส่วนคำสั่งที่เลือกดังนั้นคุณสามารถใส่อะไรก็ได้ตามที่คุณต้องการรวมถึงNULLs, ค่าคงที่สตริง, นิพจน์หรือแม้แต่เคียวรีย่อย
lc

เหตุใดจึงไม่ทำงานINSERT INTO newTable (col1, col2, col3,col4) values ((SELECT column1, column2, column3 FROM oldTable where condition),'string');

1
@AbdullahNurum เนื่องจากการสืบค้นสเกลาร์ของคุณเลือกมากกว่าหนึ่งคอลัมน์ ดูstackoverflow.com/questions/4141370/…และstackoverflow.com/questions/6254913//
lc

1
หากทั้งสองตารางมีสคีมาที่คล้ายกัน แต่มีคอลัมน์ที่มี 'ข้อมูลจำเพาะเกี่ยวกับตัวตน' ใน YES คำสั่ง SQL จำเป็นต้องระบุคอลัมน์ทั้งหมดยกเว้นคอลัมน์ที่มีสเปคของข้อมูลประจำตัว
Gabriel Marius Popescu

18

นี่เป็นวิธีที่เหมาะสมในการทำ:

INSERT INTO destinationTable
SELECT * FROM sourceTable

16

วิธีง่ายๆหากไม่มีตารางใหม่และคุณต้องการทำสำเนาของตารางเก่าด้วยทุกสิ่งดังนั้นการติดตามใน SQL Server

SELECT * INTO NewTable FROM OldTable




4
INSERT INTO DestinationTable(SupplierName, Country)
SELECT SupplierName, Country FROM SourceTable;

ไม่ใช่ชื่อคอลัมน์บังคับที่ต้องเหมือนกัน


3

แทรกคอลัมน์ที่เลือกพร้อมเงื่อนไข

INSERT INTO where_to_insert (col_1,col_2) SELECT col1, col2 FROM from_table WHERE condition;

คัดลอกข้อมูลทั้งหมดจากตารางหนึ่งไปอีกตารางหนึ่งด้วยชื่อคอลัมน์เดียวกัน

INSERT INTO where_to_insert 
SELECT * FROM from_table WHERE condition;

0
CREATE TABLE `table2` LIKE `table1`;
INSERT INTO `table2` SELECT * FROM `table1`;

แบบสอบถามแรกจะสร้างโครงสร้างจากtable1ถึงtable2และแบบสอบถามที่สองจะนำข้อมูลจากtable1ไปยังtable2

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.