2012-01-03 55 views
55

Có thể đổi tên một ràng buộc trong SQL Server không? Tôi không muốn phải xóa và tạo một cái mới vì ràng buộc này ảnh hưởng đến các ràng buộc đã tồn tại khác và tôi sẽ phải tạo lại/thay đổi chúng.Đổi tên một ràng buộc trong SQL Server?

Trả lời

53

Bạn có thể đổi tên sử dụng sp_rename sử dụng @objtype = 'OBJECT'

này hoạt động trên các đối tượng được liệt kê trong sys.objects trong đó bao gồm những hạn chế

+9

Chỉ trong trường hợp bạn không thể có được điều này để làm việc, nó nói trong MSDN - * "Khi đổi tên một ràng buộc, lược đồ mà ràng buộc thuộc phải được xác định." * –

+0

Đối với các ràng buộc PK, không cần phải chỉ định '@objtype = 'OBJECT''. Chỉ cần chỉ định tên cũ và tên mới. – pkuderov

36

Bạn có thể sử dụng sp_rename.

sp_rename 'CK_Ax', 'CK_Ax1' 
+2

+1 Đây là những gì SSMS sử dụng khi đổi tên các ràng buộc. Đối với một ràng buộc PK nó vượt qua 'INDEX' làm kiểu đối tượng. –

+2

Điều quan trọng cần lưu ý là ràng buộc CHECK, không giống như PK, không yêu cầu tiền tố bảng trên tham số 'sp_rename' đầu tiên, và sẽ thất bại nếu bạn sử dụng nó. – mattmc3

30

Sau một đào sâu thêm, tôi thấy rằng nó thực sự có được trong hình thức này:

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

Source

+1

Đây là câu trả lời chính xác hơn. Các biểu mẫu khác chỉ hoạt động vì hầu hết mọi người đổ tất cả các bảng của chúng vào lược đồ mặc định (thường là "dbo :) và bạn có thể bỏ qua lược đồ mặc định. Nhưng nếu bạn sử dụng nhiều lược đồ, điều này là đúng (và bạn luôn có thể nói" dbo "). – Godeke

7

câu trả lời là đúng:

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

Tôi biết điều này là một câu hỏi cũ, nhưng tôi chỉ thấy sau đây là rất hữu ích, ngoài các câu trả lời tuyệt vời khác:

Nếu ràng buộc để được đổi tên có một khoảng thời gian nào đó (dot), sau đó bạn cần phải đặt nó bên trong dấu ngoặc vuông, như vậy:

sp_rename 'schema.[Name.With.Period.In.It]', 'New.Name.With.Period.In.It' 
Các vấn đề liên quan