SQL Server - Membuat salinan tabel database dan menempatkannya di database yang sama?

108

Saya memiliki tabel ABC di database DB. Saya ingin membuat salinan ABC dengan nama ABC_1, ABC_2, ABC_3 di DB yang sama. Bagaimana saya bisa melakukannya menggunakan kueri Studio Manajemen (lebih disukai) atau SQL?

Ini untuk SQL Server 2008 R2.

sequel.learner
sumber
1
posting lain yang tidak terkait langsung, tetapi dapat terkait dengan use-case di atas - stackoverflow.com/questions/6810425/… ini dapat berguna ketika Anda ingin mengedit salinan tabel (misalnya, memungkinkan nulls, mengubah tipe data, dll. .) tanpa harus membuat ulang salinannya.
sequel.learner

Jawaban:

212

Penggunaan SELECT ... INTO:

SELECT *
INTO ABC_1
FROM ABC;

Ini akan membuat tabel baru ABC_1yang memiliki struktur kolom yang sama ABCdan berisi data yang sama. Kendala (misalnya kunci, nilai default), bagaimanapun, tidak-disalin.

Anda dapat menjalankan kueri ini beberapa kali dengan nama tabel yang berbeda setiap kali.


Jika Anda tidak perlu menyalin data, hanya untuk membuat tabel kosong baru dengan struktur kolom yang sama, tambahkan WHEREklausa dengan ekspresi salah:

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
Mahmoud Gamal
sumber
3
Jawaban sempurna untuk masalah saya.
sequel.learner
8
Tidak berfungsi sepenuhnya .... kolom terhitung di aslinya tidak disalin sebagai yang sama di target. Juga, batasan PK dan default juga tidak disalin
Simon Green
@SimonGreen - Anda dapat memposting pertanyaan baru untuk masalah ini dengan kode Anda.
Mahmoud Gamal
3
Tentu saja itu tidak bekerja sepenuhnya. Dia memperingatkan batasan jangan disalin, juga kunci primer, atau nilai default. Perintah yang dia tawarkan membuat tabel baru dengan struktur kolom yang sama (seperti yang dia katakan) dan memasukkan semua data ke dalam tabel baru untuk Anda.
pengguna5855178
1
Saya menemukan menggunakan SELECT TOP(0) *lebih bersih daripada WHEREmetode pernyataan selalu-salah
Timin
21

Salin Skema (Hasilkan DDL) melalui SSMS UI

Di SSMS, perluas database Anda di Object Explorer , buka Tables , klik kanan pada tabel yang Anda minati dan pilih Script Table As , Create To , New Query Editor Window . Lakukan pencarian dan ganti ( CTRL + H ) untuk mengubah nama tabel (misalnya, masukkan ABCke kolom Find What dan ABC_1di kolom Replace With lalu klik OK ).

Salin Skema melalui T-SQL

Jawaban lain yang menunjukkan cara melakukan ini dengan SQL juga berfungsi dengan baik, tetapi perbedaan dengan metode ini adalah Anda juga akan mendapatkan indeks, batasan, dan pemicu.

Salin Data

Jika Anda ingin memasukkan data, setelah membuat tabel ini jalankan skrip di bawah ini untuk menyalin semua data dari ABC (dengan tetap menggunakan nilai ID yang sama jika Anda memiliki field identitas):

set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off
JohnLBevan
sumber
1
Apakah Anda yakin metode ini juga menyalin indeks? Saya mencobanya dan ternyata tidak.
BornToCode
3
Anda harus mengatur IDENTITY_INSERTke ON untuk mengizinkan mengatur kolom identitas "secara manual", Anda mencampur urutan dalam contoh Anda. Juga, Anda harus MENJELASKAN daftar kolom Anda
jean
2
Terima kasih @jean; terlihat baik setelah 6 tahun tanpa disadari! Tetap.
JohnLBevan
Ini hampir menyelesaikan masalah saya. Trik terakhir adalah Anda dapat menyeret folder "Kolom" di pohon di SSMS ke editor untuk mendapatkan daftar kolom. Saya memiliki kolom timestamp di setiap tabel, jadi saya harus mendapatkan daftar kolom, dan kemudian menghapus timestamp.
Wade Hatler
10

Jika Anda ingin menduplikasi tabel dengan semua batasan & kuncinya, ikuti langkah-langkah di bawah ini:

  1. Buka database di SQL Management Studio.
  2. Klik kanan pada tabel yang ingin Anda duplikat.
  3. Pilih Tabel Skrip sebagai -> Buat ke -> Jendela Editor Kueri Baru. Ini akan menghasilkan skrip untuk membuat ulang tabel di jendela kueri baru.
  4. Ubah nama tabel dan kunci relatif & batasan dalam skrip.
  5. Jalankan skrip.

Kemudian untuk menyalin data, jalankan skrip di bawah ini:

SET IDENTITY_INSERT DuplicateTable ON

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

SET IDENTITY_INSERT DuplicateTable OFF
Rousonur Jaman
sumber
4

Opsi pertama

select *
  into ABC_1
  from ABC;

Pilihan kedua: gunakan SSIS, yaitu klik kanan pada database di object explorer> semua tugas> ekspor data

  • sumber dan target: DB Anda
  • tabel sumber: ABC
  • tabel target: ABC_1 (tabel akan dibuat)
Claude
sumber
2

Ini adalah opsi lain:

select top 0 * into <new_table> from <original_table>
Keni
sumber
2
Permintaan ini menyalin tabel tanpa data. Pengguna diminta untuk menyalin tabel sama sekali.
Alekzander
1

gunakan sql server manegement studio atau netcat dan itu akan lebih mudah untuk memanipulasi sql

gasroot
sumber
1

Anda perlu menulis SSIS untuk menyalin tabel dan datanya, batasan dan pemicunya. Kami memiliki di organisasi kami perangkat lunak yang disebut Kal Admin oleh kalrom Systems yang memiliki versi gratis untuk diunduh (menurut saya fitur tabel salin bersifat opsional)

Chris D
sumber