Saya seorang pengembang java yang kebetulan bergabung dalam tim tanpa DBA dan di mana sebagai pengembang, saya tidak bisa mendapatkan hak DBA. Saya ditugaskan untuk memindahkan seluruh skema antara dua database, jadi tanpa memiliki DBA, saya harus melakukannya dan melakukannya dengan menjalankan skrip, tidak dapat menggunakan GUI di SQL Server 2008 karena saya tidak memiliki hak admin.
Namun, semuanya dipindahkan tanpa masalah, ketika menjalankan prosedur tersimpan pada skema baru. Pada tabel, saya menemukan saya kehilangan bidang identitas dalam sebuah tabel. Saya mengecek skrip yang membuat tabel dan itu ada di sana, namun, SQL Server tidak mendapatkannya ketika saya menjalankan skrip. Saya kemudian diberitahu oleh DBA bahwa dia telah melihat masalah yang sama sebelumnya.
Bagaimanapun, untuk SQL Server 2008, ini adalah langkah-langkah yang saya ambil untuk menyelesaikan masalah ini dan mereka bekerja, jadi saya memposting ini di sini dengan harapan ini akan membantu seseorang. Inilah yang saya lakukan karena saya memiliki dependensi FK pada tabel lain yang membuat ini lebih sulit:
Saya menggunakan kueri ini untuk memverifikasi identitas memang hilang dan untuk melihat dependensi pada tabel.
1.) Temukan statistik di atas meja:
exec sp_help 'dbo.table_name_old';
2.) Buat duplikat, tabel baru yang identik, kecuali tambahkan bidang identitas pada bidang PK di tempat sebelumnya.
3.) Nonaktifkan identitas untuk memindahkan data.
SET IDENTITY_INSERT dbo.table_name ON
4.) Transfer data.
INSERT INTO dbo.table_name_new
(
field1, field2, etc...
)
SELECT
field1, field2, etc...
FROM
dbo.table_name_old;
5.) Verifikasi data yang ada.
SELECT * FROM dbo.table_name_new
6.) Aktifkan kembali identitas.
SET IDENTITY_INSERT ToyRecP.ToyAwards.lkpFile_New OFF
7.) Ini adalah skrip terbaik yang saya temukan untuk mendapatkan semua hubungan FK untuk memverifikasi tabel mana yang merujuk tabel asli sebagai dependensi dan saya menemukan banyak, jadi itu adalah penjaga!
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
ORDER BY ReferenceTableName;
8.) Pastikan Anda memiliki semua skrip PK dan FK untuk semua tabel yang terlibat, sebelum langkah berikutnya.
9.) Anda dapat mengklik kanan pada setiap kunci dan skrip ini menggunakan SQL Server 2008
10.) Jatuhkan FK dari tabel dependensi menggunakan sintaks ini:
ALTER TABLE [dbo].[table_name] DROP CONSTRAINT [Name_of_FK]
11.) Jatuhkan meja asli:
DROP TABLE dbo.table_name_old;
13.) Langkah-langkah selanjutnya bergantung pada skrip yang Anda buat di SQL Server 2008 di langkah 9.
--Tambahkan PK ke tabel baru.
--Tambahkan FK ke tabel baru.
--Tambahkan FK kembali ke tabel ketergantungan.
14.) Verifikasi semuanya benar dan lengkap. Saya menggunakan GUI untuk melihat tabel.
15.) Ubah nama tabel baru menjadi nama tabel asli.
exec sp_RENAME '[Schema_Name.OldTableName]' , '[NewTableName]';
Akhirnya, semuanya berhasil!