많은 삭제 작업을 수행하는 대규모 절차가 있습니다. 문제는 다음과 같습니다.
테이블 이름을 지정한 다음이 테이블을 삭제하기 전에 삭제해야하는 모든 테이블을 표시하는 쿼리를 작성하는 방법이 있는지 궁금합니다. 누구든지 내게 손을 줄 수 있습니까?
다음 쿼리는 @tablename의 테이블을 가리키는 외래 키가있는 모든 테이블을 반환합니다.
declare @tablename sysname = 'your table name';
select OBJECT_NAME(parent_object_id) parent_object_name
from sys.foreign_keys
where OBJECT_NAME(referenced_object_id) = @tablename;
테이블을 삭제하기 전에이 모든 것을 삭제해야합니다.
(SQL Server 2014에서 테스트 됨)
추가 생각으로, 한 단계 아래로 이동하여이 테이블 목록을 참조하는 모든 외래 키를 찾아야하는 경우 다음과 같은 공통 테이블 표현식을 사용할 수 있습니다.
declare @tablename sysname = 'your table name';
;with cte as (
select OBJECT_NAME(parent_object_id) parent_object_name, OBJECT_NAME(referenced_object_id) referenced_object_name
from sys.foreign_keys
where OBJECT_NAME(referenced_object_id) = @tablename
union all
select OBJECT_NAME(parent_object_id) parent_object_name, OBJECT_NAME(referenced_object_id)
from sys.foreign_keys fk
inner join cte on OBJECT_NAME(fk.referenced_object_id) = cte.parent_object_name
)
select * from cte
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다