SQL Server - สร้างสำเนาของตารางฐานข้อมูลและวางไว้ในฐานข้อมูลเดียวกันหรือไม่


108

ฉันมีตาราง ABC ในฐานข้อมูล DB ฉันต้องการสร้างสำเนาของ ABC ที่มีชื่อ ABC_1, ABC_2, ABC_3 ในฐานข้อมูลเดียวกัน ฉันจะทำได้อย่างไรโดยใช้ Management Studio (ควรเป็น) หรือแบบสอบถาม SQL

สำหรับ SQL Server 2008 R2


1
โพสต์อื่นที่ไม่เกี่ยวข้องโดยตรง แต่สามารถเกี่ยวข้องกับ use-case ข้างต้น - stackoverflow.com/questions/6810425/…สิ่งนี้มีประโยชน์เมื่อคุณต้องการแก้ไขสำเนาของตาราง (เช่นอนุญาต nulls เปลี่ยนประเภทข้อมูลเป็นต้น .) โดยไม่ต้องสร้างสำเนาใหม่
sequel.learner

คำตอบ:


214

ใช้SELECT ... INTO:

SELECT *
INTO ABC_1
FROM ABC;

สิ่งนี้จะสร้างตารางใหม่ABC_1ที่มีโครงสร้างคอลัมน์เหมือนกันABCและมีข้อมูลเดียวกัน ข้อ จำกัด (เช่นคีย์ค่าเริ่มต้น) อย่างไรก็ตาม - ไม่ได้คัดลอก

คุณสามารถเรียกใช้แบบสอบถามนี้ได้หลายครั้งโดยใช้ชื่อตารางที่แตกต่างกันในแต่ละครั้ง


หากคุณไม่จำเป็นต้องคัดลอกข้อมูลเพียงสร้างตารางว่างใหม่ที่มีโครงสร้างคอลัมน์เดียวกันให้เพิ่มส่วนWHEREคำสั่งด้วยนิพจน์ที่เป็นเท็จ:

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;

3
คำตอบที่สมบูรณ์แบบสำหรับปัญหาของฉัน
sequel.learner

8
ทำงานไม่สมบูรณ์ .... คอลัมน์จากการคำนวณในต้นฉบับจะไม่ถูกคัดลอกเหมือนกันในเป้าหมาย นอกจากนี้ข้อ จำกัด PK และค่าเริ่มต้นจะไม่ถูกคัดลอกเช่นกัน
Simon Green

@SimonGreen - คุณสามารถโพสต์คำถามใหม่สำหรับปัญหานี้ด้วยรหัสของคุณ
Mahmoud Gamal

3
แน่นอนว่ามันใช้ไม่ได้อย่างสมบูรณ์ เขาเตือนว่าห้ามคัดลอกข้อ จำกัด หรือคีย์หลักหรือค่าเริ่มต้น คำสั่งที่เขาเสนอจะสร้างตารางใหม่ที่มีโครงสร้างคอลัมน์เดียวกัน (เหมือนที่เขาพูด) และแทรกข้อมูลทั้งหมดลงในตารางใหม่ให้คุณ
user5855178

1
ฉันพบว่าใช้วิธีที่SELECT TOP(0) *สะอาดกว่าWHEREวิธีการแจ้งเท็จเสมอ
Thymine

21

คัดลอกสคีมา (สร้าง DDL) ผ่าน SSMS UI

ใน SSMS ขยายฐานข้อมูลของคุณในวัตถุ Explorerไปที่ตารางให้คลิกขวาบนโต๊ะที่คุณสนใจและเลือกสคริปต์ในฐานะที่เป็นตาราง , สร้างการ , แบบสอบถาม Editor หน้าต่างใหม่ ทำการค้นหาและแทนที่ ( CTRL + H ) เพื่อเปลี่ยนชื่อตาราง (เช่นใส่ABCในฟิลด์Find WhatและABC_1ในช่องแทนที่ด้วยจากนั้นคลิกตกลง )

คัดลอกสคีมาผ่าน T-SQL

คำตอบอื่น ๆ ที่แสดงวิธีการทำโดย SQL ก็ใช้ได้ดีเช่นกัน แต่ความแตกต่างของวิธีนี้คือคุณจะได้รับดัชนีข้อ จำกัด และทริกเกอร์ด้วย

คัดลอกข้อมูล

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

set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off

1
คุณแน่ใจหรือไม่ว่าวิธีนี้จะคัดลอกดัชนีด้วย ฉันลองแล้วมันไม่ได้
BornToCode

3
คุณต้องตั้งค่าIDENTITY_INSERTเป็นเปิดเพื่ออนุญาตให้ตั้งคอลัมน์ข้อมูลประจำตัว "ด้วยตนเอง" คุณผสมลำดับในตัวอย่าง นอกจากนี้คุณต้องแสดงรายการคอลัมน์ของคุณด้วย
ยีน

2
ขอบคุณ @jean; เห็นดีหลังจาก 6 ปีไม่มีใครสังเกตเห็น! แก้ไขแล้ว.
JohnLBevan

นี่เกือบจะแก้ปัญหาให้ฉันได้ เคล็ดลับสุดท้ายคือคุณสามารถลากโฟลเดอร์ "คอลัมน์" ในโครงสร้างใน SSMS ลงในโปรแกรมแก้ไขเพื่อรับรายการคอลัมน์ ฉันมีคอลัมน์การประทับเวลาในทุกตารางดังนั้นฉันจึงต้องได้รับรายการคอลัมน์จากนั้นจึงลบการประทับเวลาออก
Wade Hatler

10

หากคุณต้องการทำซ้ำตารางโดยมีข้อ จำกัด และคีย์ทั้งหมดให้ทำตามขั้นตอนด้านล่างนี้:

  1. เปิดฐานข้อมูลใน SQL Management Studio
  2. คลิกขวาบนตารางที่คุณต้องการทำซ้ำ
  3. เลือก Script Table เป็น -> Create to -> New Query Editor Window สิ่งนี้จะสร้างสคริปต์เพื่อสร้างตารางใหม่ในหน้าต่างแบบสอบถามใหม่
  4. เปลี่ยนชื่อตารางและคีย์สัมพัทธ์และข้อ จำกัด ในสคริปต์
  5. เรียกใช้สคริปต์

จากนั้นสำหรับการคัดลอกข้อมูลให้รันสคริปต์ด้านล่างนี้:

SET IDENTITY_INSERT DuplicateTable ON

INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... ) 
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable

SET IDENTITY_INSERT DuplicateTable OFF

4

ตัวเลือกที่ 1

select *
  into ABC_1
  from ABC;

ตัวเลือกที่ 2: ใช้ SSIS นั่นคือคลิกขวาที่ฐานข้อมูลใน object explorer> งานทั้งหมด> ส่งออกข้อมูล

  • แหล่งที่มาและเป้าหมาย: ฐานข้อมูลของคุณ
  • ตารางแหล่งที่มา: ABC
  • ตารางเป้าหมาย: ABC_1 (จะสร้างตาราง)

2

นี่เป็นอีกทางเลือกหนึ่ง:

select top 0 * into <new_table> from <original_table>

2
คำขอนี้คัดลอกตารางโดยไม่มีข้อมูล ผู้ใช้ขอให้คัดลอกตารางเลย
Alekzander


1

คุณต้องเขียน SSIS เพื่อคัดลอกตารางและข้อมูลข้อ จำกัด และทริกเกอร์ เรามีซอฟต์แวร์ที่เรียกว่า Kal Admin โดย kalrom Systems ในองค์กรของเราซึ่งมีเวอร์ชันฟรีสำหรับการดาวน์โหลด (ฉันคิดว่าคุณลักษณะตารางคัดลอกเป็นทางเลือก)

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