Bir tablodaki birincil anahtar sütunumun türünü int'den guid'e değiştirmem gerekiyor. Veritabanında zaten kaybetmek istemediğim veriler var ve göz önünde bulundurulması gereken yabancı anahtarlar var. Bunu yapmak için ağrısız bir yol var mı yoksa büyük bir ** betik aracılığıyla elle yapmak zorunda mıyım? :) Herhangi bir öneri için minnettar olurumsql sunucu değişikliği int türünden bağımsız tanıtıcıya PK türü
cevap
Scriptleri kullanarak zor yoldan yapmanız gerekecek:
0), tek kullanıcı modunda
1) ana tablo için yeni bir GUID sütun eklemek almak ve bunu doldurmak.
2) yeni ekle) mevcut int FKs
4) damla eski int sütun
5 damla)
UPDATE c
SET FKcolumn=p.NewGuid
FROM ChildTable c
INNER JOIN ParentTable p ON p.OldIntID=c.OldIntId
3 bir güncelleme ile her alt tabloya yeni FK sütun ekleyin ve bunları doldurmak 6) Tekli kullanıcı modu
kılavuz sütunundaki FK'ler, SQL Server Management stüdyosunun sütun ve anahtarları eklemek ve bırakmak için komut dosyaları oluşturması gerekir. Sadece SSMS'deki değişiklikleri yapın ve "Change Script Oluştur" araç çubuğu simgesini tıklayın ve kodu bir metin dosyasına kesip yapıştırabilirsiniz.
- kullanın seçeneği "/ DAMLA SıNıRLAMA ve indeksleri oluşturma" yaratmak için veritabanı üzerinde "komut üret" (melodi sihirbazı ileri butonuna kullanın). Dizinleri ve kısıtlamaları düşürmek için oluşturulan SQL komut dosyasının bölümünü çalıştırın. aşağıdaki gibi
bir yardımcı fonksiyon ve prosedür oluşturun:
-
tasarımcı içinde
- Açık tablo (SQL Management Studio veya diğer aracı) :
- Şimdi her tablo için manuel çalışmayı geliyor
- Sütunun bigint türünü VARCHAR olarak değiştirin (50)
- Yürüt "EXEC bigIntToGuid 'myTable', 'myBigIntColumn' Geri tablo tasarımcı değişim kolon tipine
- "Uniqueidentifier" İsteğe
- varsayılan değeri ekleyebilirsiniz için: NEWID() ve/veya set sütun olarak birincil anahtar
CREATE FUNCTION [dbo].[GuidFromHash] ( @Input nvarchar(MAX) ) RETURNS nvarchar(MAX) AS BEGIN RETURN LOWER(SUBSTRING(@Input, 1,8)+'-'+SUBSTRING(@Input, 9,4)+'-'+SUBSTRING(@Input, 13,4)+'-'+SUBSTRING(@Input, 17,4)+'-'+SUBSTRING(@Input, 21,12)) END CREATE PROCEDURE [dbo].[bigIntToGuid] ( @table varchar(50), @column varchar(50) ) AS DECLARE @SQL VARCHAR(MAX) SET @SQL='UPDATE @Table SET @Column=dbo.HashToGuid(''cc''+CONVERT(VARCHAR, HASHBYTES(''MD5'',LTRIM(@Column)),2))' SET @SQL=REPLACE(@SQL,'@Table',@Table) SET @SQL=REPLACE(@SQL,'@Column',@Column) EXEC(@SQL) SET @SQL='SELECT * FROM @Table' SET @SQL=REPLACE(@SQL,'@Table',@Table) SET @SQL=REPLACE(@SQL,'@Column',@Column) EXEC(@SQL)
- sql oluşturulan komut 1. adımda oluşturulan açın
- kısıtlaması ve dizin oluşturma için senaryonun sadece bir bölümünü seçip bu yaklaşım guid ve veri bütünlüğünü korumak için int dönüştürme garantiler o
yürütün.
SQL snippet'inde bir yazım hatası var: HashToGuid GuidFromHash okumalı veya işlev adı HashToGuid olarak değiştirilmelidir. –
- 1. SQL-Server - İşlenen türü çakışması: uniqueidentifier, int
- 2. PK
- 3. Variadic Şablon için Deduce Bağımsız Değişken Türü?
- 4. Sql nvarchar int int dönüşümü dönüştürmek
- 5. İşlenen türü çakışması: int,
- 6. kipi: Kompozit PK Görüşler vs Vekil PK
- 7. SQL sunucudaki para veri türünden nasıl dönüşebilirim?
- 8. Anonim işlevin bağımsız değişken türü
- 9. MS SQL Server NTEXT - INT
- 10. Bilinmeyen sütun türü "int" istenen
- 11. SQL INT işlevine erişme
- 12. nesne türünden devralınan neden
- 13. SQL Server: convert ((int) yıl, (int) ay (int) gün) DateTime
- 14. Çalışma zamanında argüman türü değişikliği ile Scala vaka sınıfı
- 15. SQL Server Onaltılık veri türü
- 16. SQL bağlantılı sunucu, değişken
- 17. SQL Bağlantılı sunucu - SP
- 18. Sql sunucu geçici tablosu
- 19. Sql Sunucu Geçici İstisna Numaraları
- 20. Kümelenmiş dizini (PK) SQL 2005'te değiştirmenin en iyi yolu
- 21. JavaFX bağ türü int değeriyle etiketleme
- 22. SQL AVG bir int dönüyor
- 23. Sql Sunucu Güncelleştirmesi tetikleyicisi: Nasıl çalışır?
- 24. X türünden x türüne dönüştürülemiyor?
- 25. Bir TypeTag türünden alın?
- 26. Birden çok türü alan bağımsız değişken nasıl belgelenir?
- 27. Sql sunucu tablosu kullanım istatistikleri
- 28. SQL 2008 Bağlantılı Sunucu Bağlantısı
- 29. SQL sunucu tablolarındaki kayıtlar eksik
- 30. SQL VIEW Desteklenmeyen Veri Türü
Bunu neden yapmak istiyorsunuz? Ben şu anda tam tersi girişiminde bulunuyorum ... – cjk
Ben de, tavsiye ederim ** değil ** bunu yapmak için - bunun için herhangi bir özel neden? –
Bunu yapmam gerekiyor çünkü birden fazla abone sunucusuyla birleştirme çoğaltma ayarlıyorum ve satır kimliğimin senkronizasyon nedeniyle değişmesini istemiyorum. Ayrıca, birleştirme çoğaltması tüm tablolarda bir guid sütunu eklerse, tümüyle bir guid PK col'ınız yoksa, bir ad int int toplaması gereksizdir. – anakic