테이블을 기반으로 참조하는 모든 테이블을 반환 할 수있는 쿼리 (SQL Server)를 어떻게 작성할 수 있습니까?

RJ.

많은 삭제 작업을 수행하는 대규모 절차가 있습니다. 문제는 다음과 같습니다.

  1. 이 삭제에서 누락 된 테이블이 있습니다 (삭제해야 함).
  2. 삭제 순서에 어려움을 겪고 있습니다.

테이블 이름을 지정한 다음이 테이블을 삭제하기 전에 삭제해야하는 모든 테이블을 표시하는 쿼리를 작성하는 방법이 있는지 궁금합니다. 누구든지 내게 손을 줄 수 있습니까?

BeanFrog

다음 쿼리는 @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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관