Đổi tên một ràng buộc trong SQL Server?


79

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 khác đã tồn tại và tôi sẽ phải tạo lại / thay đổi những ràng buộc đó.

Câu trả lời:


75

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

Điều này hoạt động trên các đối tượng được liệt kê trong sys.objects bao gồm các ràng buộc


14
Chỉ trong trường hợp bạn không thể làm cho điều này hoạt động, nó nói trong MSDN - "Khi đổi tên một ràng buộc, lược đồ chứa ràng buộc đó phải được chỉ định."
Black Light

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

72

Sau một số lần đào sâu hơn, tôi thấy rằng nó thực sự phải ở dạng này:

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

Nguồn


7
Đâ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 kết xuất tất cả các bảng của họ 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 đúng (và bạn luôn có thể nêu rõ" dbo " ).
Godeke

Từ nguồn, có vẻ như bạn không cần tham chiếu N'OBJECT '
Abrham Smith,

51

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ó chuyển INDEXdưới dạng kiểu đối tượng.
Martin Smith

3
Cũng cần lưu ý rằng ràng buộc CHECK, không giống như PK, không yêu cầu tiền tố bảng trên sp_renametham số đầu tiên và sẽ không thành công nếu bạn sử dụng.
mattmc3

8

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

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

3

Tôi biết đây là một câu hỏi cũ, nhưng tôi chỉ thấy những điều sau 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ó dấu chấm trong đó (dấu chấm), thì bạn cần đặt nó trong dấu ngoặc vuông, như sau:

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

Và cũng như: không đặt dấu ngoặc vuông trong tên mới. Nếu không, bạn có thể kết thúc bằng một tên có chứa dấu ngoặc
phân biệt chữ hoa chữ thường
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.