-
사실 데이터베이스의 데이터를 삭제하는 방법은 복잡하지 않습니다. 왜 굳이 귀찮게 해야 할까요? 먼저 여기서 소개하는 것은 데이터베이스의 모든 데이터를 삭제하는 것입니다. 왜냐하면 데이터가 상호 제약을 받을 수 있기 때문입니다. 무한 루프에 빠지게 됩니다. 사실 데이터베이스의 데이터를 삭제하는 방법은 복잡하지 않습니다. 왜 굳이 귀찮게 해야 할까요? 먼저 여기서 소개하는 것은 데이터가 상호 제약을 받을 수 있기 때문에 삭제 작업입니다. 둘째, 여기서는 Microsoft의 비공식 sp_MSForEachTable 저장 프로시저가 사용됩니다.
아마도 많은 독자들과 친구들이 이런 경험을 해본 적이 있을 것입니다. 개발 데이터베이스를 기반으로 빈 데이터베이스를 정리하고 싶지만 데이터베이스 구조에 대한 전반적인 이해가 부족하여 테이블의 레코드를 삭제할 때 삭제가 되지 않는 경우가 있습니다. 이는 외래 키 제약이 있을 수 있기 때문입니다. 일반적인 데이터베이스 구조는 기본 테이블과 하위 테이블입니다. 이 경우 일반적으로 하위 테이블 레코드를 먼저 삭제한 다음 기본 테이블 레코드를 삭제해야 합니다.
데이터 레코드를 삭제하면 delete 문과 truncate 문이 떠오르는 경우가 많습니다. 그러나 두 개 이상의 테이블 사이에 제약 조건이 있는 경우 이 두 문이 실패할 수 있으며, 가장 끔찍한 것은 이 두 명령만 실행할 수 있다는 것입니다. 한 번에 한 테이블씩. 그렇다면 SQL Server 데이터베이스의 모든 레코드를 실제로 삭제하려면 어떻게 해야 합니까? 두 가지 옵션이 있습니다.
1. 순서대로 하나씩 삭제하는 방법은 테이블이 많지 않더라도 제약조건을 연구하는데 많은 시간과 에너지를 소비해야 하기 때문에 매우 비현실적입니다. 그런 다음 어떤 테이블을 먼저 삭제할지, 다음에는 어떤 테이블을 삭제할지, 어떤 테이블을 마지막으로 삭제할지 알아보세요.
2. 모든 제약 조건을 비활성화하고 모든 데이터를 삭제한 다음 마지막으로 제약 조건을 활성화합니다. 이렇게 하면 이 작업을 자동으로 완료하기 위해 간단한 저장 프로시저만 작성하면 됩니다.
이 두 가지 옵션 중 두 번째 옵션이 가장 간단하고 효과적이라는 것을 어렵지 않게 알 수 있습니다. 그렇다면 두 번째 옵션을 사용할 때는 어떻게 구현해야 할까요?
먼저 모든 테이블을 반복하는 코드를 작성해야 합니다. 여기서는 sp_MSForEachTable 저장 프로시저를 권장합니다. Microsoft 공식 문서에는 이 저장 프로시저에 대한 설명이 없고 많은 개발자가 들어본 적이 없을 수도 있으므로 검색해 보세요. 대부분의 해결 방법은 매우 복잡합니다. 공식적인 문서가 없기 때문에 이러한 저장 프로세스가 불안정할 수 있으며 심리적으로 거부할 수도 있다고 생각하는 사람들도 있지만 그렇지 않습니다. 전체 스크립트를 살펴보겠습니다.
절차 만들기 sp_DeleteAllData
처럼
EXEC sp_MSForEachTable 'ALTER TABLE ALL 제약 조건'
EXEC sp_MSForEachTable 'ALTER TABLE TRIGGER ALL'을 비활성화합니다.
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE CHECK ALL'
EXEC sp_MSForEachTable 'ALTER TABLE 활성화'
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
가다
이 스크립트는 sp_DeleteAllData라는 저장 프로시저를 생성합니다. 세 번째 문은 실제로 모든 데이터를 삭제합니다. 마지막 문은 각 테이블의 레코드를 표시합니다. 이 문은 생략할 수 있습니다. 모든 테이블이 지워졌는지 확인하고 싶습니다.
물론 생성된 데이터베이스가 아닌 모든 데이터베이스에서 이 저장 프로시저를 실행할 수 있지만, 말하지 않았다고 해서 비난하지 마세요. 먼저 데이터베이스를 백업하고 백업 데이터베이스를 사용하여 복원한 다음 저장 프로시저를 실행하세요. , 하하, 비록 큰 데이터베이스이더라도 데이터베이스가 빈 데이터베이스가 되는 데는 오랜 시간이 걸리지 않을 것입니다. 조금 무섭습니다!