SQL Server에서 제약 조건의 이름을 바꾸시겠습니까?


83

SQL Server에서 제약 조건의 이름을 바꿀 수 있습니까? 이 제약 조건이 이미 존재하는 다른 제약 조건에 영향을 미치고이를 다시 생성 / 변경해야하기 때문에 새 제약 조건을 삭제하고 만들 필요가 없습니다.

답변:


77

sp_rename을 사용하여 이름을 바꿀 수 있습니다.@objtype = 'OBJECT'

이것은 제약 조건을 포함하는 sys.objects에 나열된 객체에서 작동합니다.


14
이 작업을 수행 할 수없는 경우를 대비하여 MSDN에 "제약 조건의 이름을 바꿀 때 제약 조건이 속한 스키마를 지정해야합니다."라고 말합니다.
Black Light

1
PK 제약 조건의 경우 @objtype = 'OBJECT'지정할 필요가 없습니다 . 이전 이름과 새 이름을 지정하기 만하면됩니다.
pkuderov

77

좀 더 파고 들자 실제로 다음과 같은 형식이어야 함을 알았습니다.

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

출처


7
이것이 더 정확한 대답입니다. 다른 형식은 대부분의 사람들이 모든 테이블을 기본 스키마 (일반적으로 "dbo :)에 덤프하고 기본 스키마를 생략 할 수 있기 때문에 작동합니다. 그러나 여러 스키마를 사용하는 경우 이는 정확하며 항상"dbo "를 지정할 수 있습니다. ).
Godeke

당신이 N'OBJECT '참조가 필요 같은 소스에서 보이지 않는
Abrham 스미스

52

sp_rename 을 사용할 수 있습니다 .

sp_rename 'CK_Ax', 'CK_Ax1'

2
+1 SSMS가 제약 조건의 이름을 바꿀 때 사용하는 것입니다. PK 제약의 경우 INDEX객체 유형으로 전달 됩니다.
Martin Smith

3
PK와 달리 CHECK 제약 조건은 첫 번째 sp_rename매개 변수 에 테이블 접두사가 필요하지 않으며 사용하는 경우 실패합니다.
mattmc3

8

대답은 사실입니다 :

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

4

나는 이것이 오래된 질문이라는 것을 알고 있지만 다른 훌륭한 답변 외에도 다음이 매우 유용하다는 것을 알았습니다.

이름을 바꿀 제약 조건에 마침표 (점)가 있으면 다음과 같이 대괄호로 묶어야합니다.

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

1
또한 : 새 이름에 대괄호를 넣지 마십시오. 그렇지 않으면 당신은 괄호가 포함 된 이름으로 끝낼 수 있습니다
casenonsensitive
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.