프로 시저 sp_rename.Do를 통해 테이블의 이름이 변경되었습니다. 하위 테이블의 fk 제약을 변경해야합니까?sql : 이름 바꾸기 테이블에서 제약 조건을 변경해야합니까?
답변
제약 조건과 인덱스가 자동으로 변경됩니다,하지만 당신은 수동으로 저장 프로 시저 참조, 트리거, 사용자 정의 함수 및 뷰에서 작업 이름을 변경해야합니다 탁자. the documentation on MSDN을 참조하십시오.
아니요, 테이블 이름을 변경하면 시스템 카탈로그의 적절한 메타 데이터도 업데이트되므로 제약 조건이 여전히 올바른 테이블을 참조하게됩니다.
원하는 경우 모든 외부 키를 식별하여 변경 내용의 유효성을 검사 할 수 있습니다.
SELECT PKTABLE_QUALIFIER = CONVERT(SYSNAME,DB_NAME()),
PKTABLE_OWNER = CONVERT(SYSNAME,SCHEMA_NAME(O1.SCHEMA_ID)),
PKTABLE_NAME = CONVERT(SYSNAME,O1.NAME),
PKCOLUMN_NAME = CONVERT(SYSNAME,C1.NAME),
FKTABLE_QUALIFIER = CONVERT(SYSNAME,DB_NAME()),
FKTABLE_OWNER = CONVERT(SYSNAME,SCHEMA_NAME(O2.SCHEMA_ID)),
FKTABLE_NAME = CONVERT(SYSNAME,O2.NAME),
FKCOLUMN_NAME = CONVERT(SYSNAME,C2.NAME),
-- Force the column to be non-nullable (see SQL BU 325751)
--KEY_SEQ = isnull(convert(smallint,k.constraint_column_id), sysconv(smallint,0)),
UPDATE_RULE = CONVERT(SMALLINT,CASE OBJECTPROPERTY(F.OBJECT_ID,'CnstIsUpdateCascade')
WHEN 1 THEN 0
ELSE 1
END),
DELETE_RULE = CONVERT(SMALLINT,CASE OBJECTPROPERTY(F.OBJECT_ID,'CnstIsDeleteCascade')
WHEN 1 THEN 0
ELSE 1
END),
FK_NAME = CONVERT(SYSNAME,OBJECT_NAME(F.OBJECT_ID)),
PK_NAME = CONVERT(SYSNAME,I.NAME),
DEFERRABILITY = CONVERT(SMALLINT,7) -- SQL_NOT_DEFERRABLE
FROM SYS.ALL_OBJECTS O1,
SYS.ALL_OBJECTS O2,
SYS.ALL_COLUMNS C1,
SYS.ALL_COLUMNS C2,
SYS.FOREIGN_KEYS F
INNER JOIN SYS.FOREIGN_KEY_COLUMNS K
ON (K.CONSTRAINT_OBJECT_ID = F.OBJECT_ID)
INNER JOIN SYS.INDEXES I
ON (F.REFERENCED_OBJECT_ID = I.OBJECT_ID
AND F.KEY_INDEX_ID = I.INDEX_ID)
WHERE O1.OBJECT_ID = F.REFERENCED_OBJECT_ID
AND O2.OBJECT_ID = F.PARENT_OBJECT_ID
AND C1.OBJECT_ID = F.REFERENCED_OBJECT_ID
AND C2.OBJECT_ID = F.PARENT_OBJECT_ID
AND C1.COLUMN_ID = K.REFERENCED_COLUMN_ID
AND C2.COLUMN_ID = K.PARENT_COLUMN_ID
이 스크립트에서 공급되었다 Identify all of your foreign keys in a SQL Server database
정말 이삭 같은 물건입니다. 감사합니다. –
도와 주셔서 감사합니다. –
[여기] (http://stackoverflow.com/questions/8094156/know-relationships-between-all-the-tables-of-database-in-sql-server)는 ** 다른 스크립트 **이며, 희망은 누군가를 돕습니다. . – stom
- 1. 제약 조건을 해제하려면 어떻게해야합니까?
- 2. SQL 서버에서이 제약 조건을 적용하는 방법
- 3. 테이블의 캐스케이드 이름 바꾸기 방법, MS SQL 2005
- 4. SQL Server의 열 이름 바꾸기
- 5. SQL Express의 테이블 이름 바꾸기
- 6. MySQL에서 제약 조건을 확인하십시오.
- 7. SQL 제약 조건 질문
- 8. xib 파일 이름 바꾸기
- 9. 모든 외래 키 및 제약 조건을 무시한 SQL 행 삭제
- 10. SQL Server - 값이 다른 테이블에서 오는 열의 CHECK 제약
- 11. 많은 데이터베이스 테이블에서 리 팩터 이름 바꾸기 필드
- 12. Oracle 수동으로 FK 제약 조건을 추가하십시오.
- 13. 제약 조건 대화 상자를 사용하여 SQL Server 2008에 제약 조건을 추가하는 방법은 무엇입니까?
- 14. MySQL은 체크 제약 조건을 지원합니까?
- 15. JPA에서이 제약 조건을 어떻게 표현합니까?
- 16. CALayer의 제약 조건을 어떻게 업데이트합니까?
- 17. Authlogic : 고유성 제약 조건을 끕니다.
- 18. ActiveRecord : 제약 조건을 찾는 방법?
- 19. mysql에 제약 조건을 적용하는 방법
- 20. 이름 바꾸기
- 21. SQLAlchemy에서 외래 키 제약 조건을 삭제하려면 어떻게해야합니까?
- 22. 조건을 포함하는 SQL 검색
- 23. MySQL 관계 및 제약 조건을 사용해야합니까?
- 24. SQL Server 오류 : "%"은 (는) 제약 조건이 아닙니다. 제약 조건을 삭제할 수 없습니다. 이전 오류 참조
- 25. MS SQL Server 2005에서 열 이름 바꾸기
- 26. 외래 키 제약 조건을 검색하는 방법은 무엇입니까?
- 27. 제약 조건을 삭제할 때 지원 인덱스도 삭제됩니까?
- 28. 제약 - SQL 서버
- 29. aspnet_users 테이블에서 내림차순 이름 (SQL Server 2005)
- 30. MySQL은 NOT NULL 제약 조건을 무시합니다.
아침에 쓸데없는 일을 저축 해 주셔서 대단히 감사드립니다. :-) – EvilDr