2016-09-16 3 views
1

Verwenden von SQL Server 2014: Ich habe es mit einer großen Produktionsdatenbank zu tun, die so viele ungenannte Standardeinschränkungen enthält.So benennen Sie alle unbenannten Standardeinschränkungen ordnungsgemäß um

Die unbenannten Standardeinschränkungen verursachen viele Probleme, weil sie in jeder "DEV" - oder "QA" -Umgebung, die ich in die Datenbankschema-Populationsskripts einfüge, einen zufälligen Namen erhalten. Die zufälligen Standardbeschränkungsnamen verursachen, dass die SSDT-Schemavergleichs-/Aktualisierungsskripts fehlschlagen.

Ich muss die Standard-Spalteneinschränkungen der Produktionsdatenbank korrekt zu einem richtigen Namen benennen, wenn sie also ein Skript für das Datenbankschema erstellen, erhalten sie keinen zufälligen Namen.

Ich verwende die folgende Abfrage die Liste der unbenannte Standardeinschränkungen zu erhalten:

select 
    t.name, c.name, d.name, definition 
from 
    sys.tables t 
join  
    sys.default_constraints d on d.parent_object_id = t.object_id 
join  
    sys.columns c on c.object_id = t.object_id  
        and c.column_id = d.parent_column_id 

Es gibt 100s von ihnen :(

Gibt es einen „sicheren“ Weg, um all die ungenannten Standard umbenennen Einschränkungen für einen Eigennamen, so dass sie "unbenannt" nicht berücksichtigen und keinen zufälligen Namen in jeder Umgebung erhalten?

Ich dachte über obige Abfrage zu erweitern und sp_rename Anweisungen zu generieren. Da ich mit einer Produktionsdatenbank zu tun habe, Ich wollte d um den sichersten Ansatz zu finden.

Was ist der zuverlässigste und sicherste Ansatz, um dieses Problem zu lösen?

+0

gehen Sie dafür, generieren Sie diese Umbenennungsanweisungen. – Hogan

Antwort

1

Hier Dies funktioniert auf Objekte mit Verwendung umbenennen ist das Skript, das für mich gearbeitet:

select 
    CONCAT 
    (
     'exec sp_rename ', 
     ' @objname = ''['+d.name+']''', 
     ' , @newname = ''DF_',t.name,'_',c.name, '''', 
     ' , @objtype = ''OBJECT'' ;' 
    ), 
    t.name, c.name, d.name, definition 
from 
    sys.tables t 
join  
    sys.default_constraints d on d.parent_object_id = t.object_id 
join  
    sys.columns c on c.object_id = t.object_id  
        and c.column_id = d.parent_column_id 
ORDER BY t.name 

einfach einfügen Die erste Spalte des Ergebnisses in ein neues Abfragefenster umgibt es mit BEGIN TRANSACTION und ROLLBACK, um es zu testen.

0

Sie können es sp_rename@objtype = 'OBJECT'

in sys.objects aufgeführt, die Einschränkungen enthält

Verwandte Themen