2012-03-07 2 views
2

을 사용하여 SQL Server 2008에서 여러 테이블 삭제 이것은 일반적인 질문으로 보일지 모르지만 내 문제를 해결할 수있는 올바른 대답을 찾기 위해 인터넷 검색을 수행했습니다.Datalist C#

서로 연결된 테이블이 ProductID인데 기본 테이블의 제품이 삭제되면 해당 테이블에서 모든 데이터를 삭제하고 싶습니다. 즉

제품 : ProductID - Vender - Description

ProductRatings : ProductID - Rating - VisitorsCount

ProductComments : ProductID - VisitorName - Comment

나는 이러한 상황에 대한 SQL 트리거를 사용하는 것을 읽을 수 있지만 나는 그것에 대해 아무 생각이 없다 게다가 ASCX.CS 파일에 내 DataSource를 언급하는 경우도 있고 경우에 따라서는 SqlDatasoruce (ASCX 파일) 사용할 수있는 쿼리 나 저장 프로 시저가 있습니까?

답변

4

가장 쉬운 방법은 외래 키 관계를 ProductID으로 구현하고 on delete cascade으로 설정하는 것입니다. 무슨가하는 것은 당신이 그 기본 키 값을 외래 키 제약 조건이있는 모든 레코드를 삭제하는 SQL 서버의 원인이되는 Products 테이블에서 기본 키 값을 삭제할 때입니다

create table ProductRatings 
(
    ProductID int not null 
     foreign key references Products(ProductID) on delete cascade, 
    Rating int not null, 
    VisitorsCount int not null 
) 

: 이것은 일반적인 생각이다. ProductComments 테이블에서도 이렇게하면 문제가 해결됩니다. 참조 테이블의 모든 레코드에서 DELETE을 명시 적으로 호출 할 필요가 없습니다.

그리고 참조 무결성을 사용하지 않는 경우 ...해야합니다.

EDIT : 이는 기본 키의 UPDATE에도 해당됩니다. on update cascade을 지정하기 만하면 외부 키 참조가 RI를 보장하기 위해 기본 키로 갱신됩니다.

+1

데이터 일관성을 유지하려면 트리거를 여러 번 구현하는 것보다 훨씬 낫습니다. 또한 개발자가 데이터베이스에서 적절한 외부 키 관계를 설정하도록 권장합니다. – NotMe

+0

@ChrisLively와 동의하십시오. 사실 나는 트리거가 언제나 최후의 수단이되어야한다고까지까지 갈 것입니다. 그들은 종종 그들이 해결하는 것보다 더 많은 문제를 야기합니다. – JamieSee

+0

고맙습니다. Shark, 당신은이 문제를 해결할뿐만 아니라 미래에도 매우 유용 할 훌륭한 지식을주었습니다 .... 나는 또한 Insert와 Update에서도 잘 작동 할 수 있기를 바랍니다. –