2010-11-28 9 views
1

SQL Server 2008에서는 삽입/업데이트시 복잡한 유효성 검사가있는 테이블이 있습니다. 여기에는 임시 테이블에서 XML 입력을 테이블로 변환하여 영구 테이블에 대해 데이터의 유효성을 검사해야합니다.SQL Server에서 "AFTER INSERT, UPDATE"트리거 동작

그러나 유효성 검사가 필요없는 간단한 정수 열을 자주 업데이트하는 시나리오도 있습니다. 내가 here을 읽은 것부터, SQL Server는 업데이트를 수행 할 때 영향을받는 열뿐만 아니라 temp-in-memory "inserted"테이블의 전체 행을 반환 할 것입니다. 그렇다면 단순히 정수 업데이트를 수행 할 때마다 복잡한 XML 유효성 검사가 불필요하게 수행됩니다.

올바르게 이해하고 있습니까? 그렇다면 어떻게 저장 프로 시저를 통해 삽입/업데이트가 필요합니까?

답변

3

예, 먼저 EVERY INSERT 또는 UPDATE 작업이 트리거됩니다. 특정 열이 영향을받을 때만 트리거하도록 설정할 수는 없습니다. 트리거 내에서 특정 열이 영향을 받았는지 여부를 확인하고이를 기반으로 결정을 내릴 수는 있지만 트리거가 처음부터 실행되는 것을 막을 수는 없습니다.

둘째, 트리거가 작동하면 INSERTED 및/또는 DELETED 의사 테이블에 기본 테이블의 모든 열을 갖게됩니다.

큰 XML 열을 별도의 테이블로 옮기고 큰 XML 유효성 검사 트리거를 해당 테이블에만 배치하면됩니다. 이 경우 기본 테이블 만 업데이트하거나 삽입하면 데이터가 적어지고 유효성 검사 논리가 줄어 듭니다. XML 테이블을 삽입하거나 업데이트 할 때만 큰 유효성 검사가 진행됩니다.

+2

방금 ​​왜 내가 트리거를 사용하지 않고 항상 삽입/업데이트/삭제를 위해 저장 프로 시저를 사용했는지 깨달았습니다. "@xml이 null이 아닌 경우 begin (validate) (update) end"라고 말하는 것이 훨씬 쉽습니다. – IamIC

+0

@IanC : 트리거는 그럴 이유가 있지만 모든 것에 대한 해결책은 아닙니다. 저장된 proc은 더 많은 제어권을 제공합니다. –

+0

방아쇠는 지옥의 가장 깊은 층에서 끔찍하고 끔찍한 가증스럽고 역병처럼 피해야합니다. 그들은 버그 발견/디버그/수정을 매우 어렵게 만듭니다. –