Ben bir DBA'sı olmayan ve bir geliştirici olarak DBA haklarını alamadığım bir takıma katılan bir java geliştiricisiyim. Tüm şemayı iki veritabanı arasında taşımakla görevlendirildim, bu yüzden bir DBA olmadan, komut dosyaları çalıştırarak yapmalıydım, SQL Server 2008'de GUI'yi kullanamadım çünkü yönetici ayrıcalıklarına sahip değildim.
Her şey sorunsuz bir şekilde taşındı, ancak yeni schema.table üzerinde saklı bir yordam çalıştırırken, bir tablodaki kimlik alanını kaybettim buldum. Tabloyu oluşturan komut dosyasını iki kez kontrol ettim ve oradaydı, ancak komut dosyasını çalıştırdığımda SQL Server alamadı. Daha sonra bir DBA tarafından daha önce aynı sorunu gördüğünü söylediler.
Her halükarda, SQL Server 2008 için, bunlar bunu çözmek için attığım adımlar ve çalıştılar, bu yüzden burada birine yardım edeceği umuduyla burada gönderiyorum. Bunu daha zor hale getiren başka bir masada FK bağımlılıkları vardı yaptığım budur:
Bu sorgu kimliğin gerçekten eksik olduğunu doğrulamak ve tabloda bağımlılıkları görüntülemek için kullandım.
1.) Bir tablodaki istatistikleri bulun:
exec sp_help 'dbo.table_name_old';
2.) Daha önce olduğu PK alanına bir kimlik alanı eklemek dışında, aynı yeni bir tablo oluşturun.
3.) Verileri taşımak için kimliği devre dışı bırakın.
SET IDENTITY_INSERT dbo.table_name ON
4.) Verileri aktarın.
INSERT INTO dbo.table_name_new
(
field1, field2, etc...
)
SELECT
field1, field2, etc...
FROM
dbo.table_name_old;
5.) Verilerin orada olduğunu doğrulayın.
SELECT * FROM dbo.table_name_new
6.) Kimliği yeniden etkinleştirin.
SET IDENTITY_INSERT ToyRecP.ToyAwards.lkpFile_New OFF
7.) Bu, özgün tablo referanslarını hangi tablo (lar) ı bağımlılıklar olarak doğrulamak için tüm FK ilişkilerini elde etmek için bulduğum en iyi komut dosyasıdır ve birçok kişiye rastladım, bu yüzden bir kaleci!
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.) Bu sonraki adımdan önce ilgili tüm tablolar için tüm PK ve FK komut dosyalarına sahip olduğunuzdan emin olun.
9.) SQL Server 2008 kullanarak her bir tuşa sağ tıklayıp komut dosyası oluşturabilirsiniz
10.) Bu sözdizimini kullanarak FK'yi bağımlılık tablolarından ayırın:
ALTER TABLE [dbo].[table_name] DROP CONSTRAINT [Name_of_FK]
11.) Orijinal masayı düşürün:
DROP TABLE dbo.table_name_old;
13.) Bu sonraki adımlar, 9. adımda SQL Server 2008'de oluşturduğunuz komut dosyalarına dayanır.
- PK'yi yeni tabloya ekleyin.
- FK'yi yeni masaya ekleyin.
FK'yi bağımlılık tablosuna ekleyin.
14.) Her şeyin doğru ve eksiksiz olduğunu doğrulayın. Tablolara bakmak için GUI'yi kullandım.
15.) Yeni tabloyu orijinal tablo adıyla yeniden adlandırın.
exec sp_RENAME '[Schema_Name.OldTableName]' , '[NewTableName]';
Sonunda, her şey işe yaradı!