2011-10-25 3 views
-2

QA SQL Server 데이터베이스를위한 작은 db-cleaner 응용 프로그램을 구축 중입니다. 당연히, 나는 그것들에 의존성이있는 테이블 행들을 삭제할 필요가있다.명시 적으로 모든 종속성을 명시 적으로 참조하지 않고 계단식 삭제

T-SQL 계단식 기능이 매우 제한되어 있으므로 NHibernate를 사용하여 문제를 단순화하려고 시도했습니다. 하지만, 내가 찾은 유일한 방법은 각 종속성에 대한 컬렉션을 객체 - 삭제에 으로 생성하고이를 cascade = delete로 표시하는 것입니다.

즉, 다른 목적으로는 필요하지 않은 많은 콜렉션 (hbm 파일과 C# 객체 모두)을 만드는 것을 의미합니다. 이 방법은 SQL을 사용하는 것만 큼 복잡합니다.

내가 누락 된 항목이 있습니까? delete-cascade를 수행하는 더 쉽고 일반적인 방법이 있습니까?

감사합니다.

EDIT : 프로덕션 DB와 동일하게 디자인 된 QA DB이므로 외래 키를 변경하지 마십시오.

는이 사람은 재귀 당신을 위해 모든 작업을 수행 SP 썼다 :

http://www.sqlteam.com/article/performing-a-cascade-delete-in-sql-server-7

필요한 약간의 터치 업 (

+3

종속성 정의 * 당신의 외래 키 *에. 이는 매우 간단합니다. 열거가 필요하지 않으며 데이터베이스에 적절한 DRI가 필요합니다. 너는 무엇을 더 필요로 하는가? – gbn

+0

내가 무슨 뜻인지 잘 모르겠다. FK는 프로덕션 DB와 동일해야하고 프로덕션 DB가 명백한 이유로 계단식을 지원하지 않으므로 DB에 DELETE CASCADE로 표시되어 있지 않습니다. – Tomata

+0

그러면 비 운영 상태에서 FK를 변경하십시오. – gbn

답변

0

은 결국 나는 삭제를 할 수있는 일반적인 방법을 발견 내 DB는 스키마를 사용하기 때문에) 매력처럼 작동합니다.

0

데이터베이스의 관련 테이블간에 외래 키가 정의되어 있다고 가정합니다. 상위 레코드가 제거 될 때 관련 레코드에서 발생할 일을 외래 키 수준에서 지정할 수 있습니다.
는 계단식 옵션에 대한 MSDN을 확인하고이를 정의하는 방법 :

Cascading FK constraints

Foreign Key Constraints

+0

앞서 언급했듯이 db 구조를 변경하는 것은 옵션이 아닙니다. – Tomata