Pengguna kami ingin me-refresh database QA dari produksi tetapi ingin dua tabel (sebut saja mereka T1 dan T2) untuk mempertahankan data QA asli. Jadi saya menyalin dua tabel dari QA (DB1) ke temp temp basis data QA (DB2). Kemudian menyegarkan DB1 dari produksi. Setelah refresh, saya ingin menimpa data T1 dan T2 dari DB2 ke DB1 sehingga dapat berisi nilai QA pre-refresh.
Saya telah melakukan yang berikut:
Menggunakan
select * INTO D1.dbo.T1 FROM D2.dbo.T1
Kemudian D1 segar dari prod
Kemudian terpotong T1 dengan langkah berikut:
SELECT COUNT(*) AS BeforeTruncateCount FROM T1; GO TRUNCATE TABLE T1; GO SELECT COUNT(*) AS AfterTruncateCount FROM T1; GO
Sekarang ketika saya kembali untuk menyalin data dari D2.T1 ke D1.T1, saya mendapatkan kesalahan bahwa sudah ada objek bernama T1 dalam database.
Haruskah saya menjatuhkan meja dan menyalin?
Atau adakah metode yang lebih baik untuk keseluruhan prosedur?
sumber
*
) jika ada bidang indentitas dalam tabel - nilai-nilai itu tidak bisa begitu saja "disalin."IIRC dengan
SELECT <stuff> INTO <target> FROM ...
sintaks SQL Server selalu mengasumsikan Anda ingin membuat tabel tujuan dari awal. Saat tabel sudah ada cobaINSERT <target> SELECT <stuff> FROM ...
sebagai gantinya.sumber
db_datareader
) maka jika Anda menjatuhkan tabel maka Anda kehilangan izin tersebut.Yang terbaik adalah menggunakan SSIS (data Impor / ekspor) untuk melakukan ini. Ini memiliki fungsi untuk hanya mentransfer tabel yang dipilih dari sumber ke tujuan. Secara opsional, Anda bahkan dapat menyimpan paket sehingga dapat digunakan kembali untuk transfer di masa mendatang / berulang.
EDIT: Menambahkan lebih banyak tangkapan layar untuk kejelasan.
sumber