2016-07-22 2 views
2

클라이언트의 개인 정보를 저장하는 ClientInfo 테이블과 비상 연락처 정보를 저장하는 EmergencyContactInfo라는 테이블이 있습니다. 현재 개인 정보가 변경되면 ClientLog라는 세 번째 테이블에 단일 레코드를 삽입하는 ClientInfo 테이블에 업데이트 트리거가 있습니다. 클라이언트의 비상 연락처 정보가 변경되면 ClientLog 레코드를 만들 수도 있습니다.별도의 테이블에있는 두 개의 트리거가 동시에 실행되는 것을 어떻게 방지합니까?

문제는 사용자가 내 웹 페이지에서 한 번의 저장으로 고객의 개인 정보와 긴급 연락처 정보를 모두 변경할 수 있다는 것입니다. EmergencyContact 테이블에 업데이트 트리거를 넣으면 내 트리거가 모두 실행되고 ClientLog 테이블에 하나만 필요할 때 두 개의 새 레코드가 삽입됩니다.

내가 알고있는 바로는 여러 테이블에 걸쳐있는 업데이트 트리거 같은 것은 없습니다. 고객의 개인 정보와 긴급 연락처 정보가 모두 변경 될 때 단일 레코드를 삽입 할 수있는 대체 방법은 무엇입니까?

+0

콜드 (Cold) 방금하면 트리거를 사용하는 대신 업데이트를 수행하는 절차로 감사를 이동합니까? –

+1

"EmergencyContact 테이블에 업데이트 트리거를 넣으면 내 트리거가 모두 실행되고 ClientLog 테이블에 하나만 필요할 때 두 개의 새 레코드가 삽입됩니다." 왜 그걸 원하니? 두 레코드를 쓰는 것이 나에게 합당한 것 같습니다. ClientLog에 무엇을 쓰고 있습니까? – aquinas

+0

가능한 옵션은 Context_Info입니다. https://stackoverflow.com/questions/174600/is-there-a-way-to-disable-a-sql-server-trigger-for-just-a-particular-scope-of-ex –

답변

1

방아쇠를 여러 테이블로 확장 할 수 없다는 이해가 정확합니다.

방아쇠가 발사되는 것을 방지하는 것과 같은 것도 없습니다.

당신이 할 수있는 일은 트리거에 특정 조건이 충족되면 아무 것도하지 못하게하는 논리를 포함시키는 것입니다.

이제 로그 테이블에 무엇을 쓰고 있는지, 어떤 논리를 적용 할 지 모르겠지만 트리거가 실행되면 이미 로그 항목이있는 경우 (예 : 로그 테이블에 새 행을 삽입하지 마십시오.

로그 테이블에 OUTER JOIN 또는 WHERE NOT EXISTS() 절을 사용하여 여러 행 삽입/업데이트를 처리 할 수도 있습니다.

기본적으로 말하고 싶은 것은, 두 트리거가 모두 실행되도록하고, 두 트리거 모두에서 로그 테이블에 쓰기 전에 일부 조건이 참/거짓인지 확인합니다. 그렇지 않으면 아무것도하지 마십시오.

+0

'DISABLE TRIGGER'는 어떻게됩니까? 나는 여기서 진짜 질문을 이해하지 못한다. 그러나 그 진술이 사실이 아닌가? – shawnt00

+0

나는 "방아쇠를 사용 안함"이란 말은 "방아쇠가 발사되지 못하게하십시오"라고했을 때 OP가 염두에 두었던 점이라고 생각하지 않습니다. 첫 번째는 보편적이며 두 번째는 내가 읽었을 때 조건부입니다. –

+0

나는 OP의 문제에 대한 해결책이 아니라는 것을 깨달았다. 나는 모든 사람이 그렇게 읽을 것이라고 확신하지는 않지만 당신의 요점을 본다. – shawnt00

0

이렇게하면 불필요하게 어렵고 오류가 발생하기 쉽습니다.

각 데이터 테이블에 별도의 로그 테이블이 있고 자체 트리거가있는 경우 전체 문제를 무시하고 예상대로 작동하게 할 수 있습니다.

로그 정보를 함께 보려면 데이터를 표시 할 때 두 테이블에서 JOIN을 사용할 수 있습니다.

+0

내가, 당신은 가입 조건이 될 일을 아닌 사소한 기술적 문제를 해결하지 않는이 트리거 무료로 실행시키는 다음 (아마보기) 조인 사용에 동의하는 동안. –

+0

테이블에 적절한 pk/fk가 ​​있다고 가정했습니다.그렇지 않은 경우 수정해야합니다. –

+0

나는 로그 테이블의 어떤 행이 잘못된 복제를 피하기 위해 하나의 업데이트를 나타 내기 위해 "연결"되어야하는지 알아내는 것 이상의 가능성이 있다고 말합니다. –