문제

SQL Server에서 상호 관련된 테이블 그룹을 삭제하는 간단한 방법이 있습니까?이상적으로는 프로세스가 끝나면 전체 그룹이 사라질 것이라는 것을 알고 있기 때문에 어떤 순서로 드롭되는지 걱정할 필요가 없습니다.

도움이 되었습니까?

해결책

어리석게 들릴 수도 있지만 SQL Server가 삭제/계단식 구문을 지원한다고 생각하지 않습니다.계단식 삭제를 수행하도록 삭제 규칙을 구성할 수 있다고 생각합니다(http://msdn.microsoft.com/en-us/library/ms152507.aspx), 그러나 내가 아는 한 SQL Server의 비결은 삭제하는 각 테이블에 대해 삭제 쿼리를 한 번만 실행한 다음 제대로 작동하는지 확인하는 것입니다.

다른 팁

다른 접근 방식은 다음과 같습니다.먼저 제약 조건을 제거한 다음 테이블을 한 번에 삭제하세요.

즉, 모든 제약조건에 대한 DROP CONSTRAINT, 각 테이블에 대한 DROP TABLE입니다.이 시점에서는 실행 순서가 문제가 되지 않습니다.

이를 위해서는 다음이 필요합니다. sp___drop___제약조건 스크립트는 다음에서 찾을 수 있습니다. 데이터베이스 저널:

sp_MSforeachtable @command1="print 'disabling constraints: ?'", @command2="sp_drop_constraints @tablename=?"
GO
sp_MSforeachtable @command1="print 'dropping: ?'", @command2="DROP TABLE ?"
GO

메모 이것은 - 분명히 - 데이터베이스의 모든 테이블을 삭제하려는 경우 조심하십시오.

이를 테스트하기 위해 SQL Server에 액세스할 수 없지만 다음은 어떻습니까?

DROP TABLE IF EXISTS table1, table2, table3 CASCADE;

Derek의 접근 방식이 효과가 있는지 확실하지 않습니다.아직 우수 답변으로 표시하지 않았습니다.

그렇지 않은 경우:SQL Server 2005에서는 가능할 것 같습니다.
거기에는 예외가 도입되었습니다(아직 사용하지 않았습니다).따라서 테이블을 삭제하고 예외가 발생하면 예외를 포착하고 모두 사라질 때까지 다음 테이블을 시도하십시오.
원하는 경우 임시 테이블에 테이블 목록을 저장하고 커서를 사용하여 탐색할 수 있습니다.

나는 결국 Apache를 사용하게 되었다. ddlutils 내 경우에는 삭제 작업을 수행했지만 SQL Server 내에서만 작동하는 솔루션이 훨씬 더 간단할 것입니다.

@Derek Park, 거기에서 테이블을 쉼표로 구분할 수 있다는 것을 몰랐기 때문에 편리하지만 예상대로 작동하지 않는 것 같습니다.IF EXISTS나 CASCADE가 SQL Server에서 인식되지 않는 것 같고 실행 중입니다. drop table X, Y, Z 명시된 순서대로 삭제해야 하는 경우에만 작동하는 것 같습니다.

또한보십시오 http://msdn.microsoft.com/en-us/library/ms173790.aspx, 드롭 테이블 구문을 설명합니다.

어떤 순서로든 테이블을 삭제하는 것을 방해하는 것은 테이블 간의 외래 키 종속성입니다.따라서 시작하기 전에 FK를 제거하십시오.

  1. INFORMATION_SCHEMA 시스템 뷰를 사용하여 이러한 테이블과 관련된 모든 외래 키 목록을 검색합니다.
  2. 각 외래 키를 삭제하세요.
  3. 이제 원하는 순서를 사용하여 모든 테이블을 삭제할 수 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top