Zmienić nazwę ograniczenia w programie SQL Server?


83

Czy można zmienić nazwę ograniczenia w programie SQL Server? Nie chcę usuwać i tworzyć nowego, ponieważ to ograniczenie wpływa na inne już istniejące ograniczenia i będę musiał je odtworzyć / zmienić.

Odpowiedzi:


77

Możesz zmienić nazwę za pomocą sp_rename za pomocą@objtype = 'OBJECT'

Działa to na obiektach wymienionych w sys.objects, które zawierają ograniczenia


14
Na wypadek, gdybyś nie mógł tego uruchomić, w witrynie MSDN jest napisane - „Podczas zmiany nazwy ograniczenia należy określić schemat, do którego należy ograniczenie”.
Black Light

1
W przypadku ograniczeń PK nie ma potrzeby @objtype = 'OBJECT'określania. Po prostu podaj starą nazwę i nową nazwę.
pkuderov

77

Po dłuższym kopaniu stwierdziłem, że faktycznie musi to być w tej formie:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint', N'OBJECT'

Źródło


7
To jest dokładniejsza odpowiedź. Inne formularze działają tylko dlatego, że większość ludzi zrzuca wszystkie swoje tabele do domyślnego schematu (zwykle „dbo :) i możesz pominąć domyślny schemat. Ale jeśli używasz wielu schematów, jest to poprawne (i zawsze możesz podać„ dbo ” )
Godeke,

Ze źródła wygląda na to, że nie potrzebujesz referencji N'OBJECT '
Abrham Smith

52

Możesz użyć sp_rename .

sp_rename 'CK_Ax', 'CK_Ax1'

2
+1 To jest to, czego używa SSMS podczas zmiany nazw ograniczeń. W przypadku ograniczenia PK przechodzi INDEXjako typ obiektu.
Martin Smith

3
Należy również zauważyć, że ograniczenia CHECK, w przeciwieństwie do PK, nie wymagają przedrostka tabeli na pierwszym sp_renameparametrze i zawiodą, jeśli go użyjesz.
mattmc3

8

odpowiedź jest prawdziwa:

exec sp_rename 
@objname = 'Old_Constraint',
@newname = 'New_Constraint',
@objtype = 'object'

4

Wiem, że to stare pytanie, ale oprócz innych świetnych odpowiedzi bardzo pomocne okazały się następujące:

Jeśli ograniczenie, które ma zostać zmienione, zawiera kropkę (kropkę), należy ująć je w nawiasy kwadratowe, na przykład:

sp_rename 'schema.[Name.With.Period.In.It]', 'New.Name.With.Period.In.It'

1
A także: nie umieszczaj nawiasów kwadratowych w nowej nazwie. W przeciwnym razie możesz skończyć z nazwą zawierającą nawiasy
wrażliwe na wielkość liter
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.