2012-11-06 2 views
0

WHERE 조건과 ORDER BY를 기반으로 지정된 테이블에 마지막 행을 복사하기 위해 테이블의 트리거를 사용하고 있습니다. 하나의 트리거를 사용하면 문제가 없어지며 각각의 테이블에 복사됩니다. 하지만 두 개의 트리거가 실행되어 이전 행의 복제본이 삽입 될 필요가없는 테이블에 나타납니다. (SQL2008 관리 Studio). 부품 번호에 따라이 행을 보낼 특정 표가 있습니다.WHERE 조건이 참이면 선택한 테이블 중 하나에 마지막 행을 삽입하십시오.

ALTER TRIGGER NewT3650 ON JD_Passdata 
FOR INSERT 
AS 
INSERT T3_650_TestData (SerialNumber, Partnumber, etc) 
SELECT TOP 1 SerialNumber, Partnumber, etc 
FROM JD_Passdata 
WHERE partnumber = 'T3_650' 
ORDER BY passdata_ndx DESC 

ALTER TRIGGER NewT4450 ON JD_Passdata 
FOR INSERT 
AS 
INSERT T4_450_TestData (SerialNumber, Partnumber, etc) 
SELECT TOP 1 SerialNumber, Partnumber, etc 
FROM JD_Passdata 
WHERE partnumber = 'T4_450' 
ORDER BY passdata_ndx DESC 

원래 PassData 테이블 : 테이블 테이블 1

201245001, T3_650 
201245002, T3_650 
201245003, T3_650 

반환 결과 2

201244999, T4_450 
201244999, T4_450 
201244999, T4_450 
나는

싶습니다에 대한

201244999, T4_450 
201245001, T3_650 
201245002, T3_650 
201245003, T3_650 

결과를 반환 여기에 구조입니다 OR 조건 또는 UNION은 마지막 행만 가져 와서 올바른 테이블에 입력하고 가능한 경우 추가 트리거를 제거합니다. 그렇지 않으면 복제 및 업데이트에 대한 검사에서도이를 수행 할 수 있습니다. 또한 데이터베이스가 DESC를 수행하기 위해 상당히 커질 것이므로 모든 항목이 느려질 수 있습니다. 순서를 제거하는 방법도 고려 사항입니다. 모든 sugesstions이 크게 감상 할 수

... THX

답변

0

내가 모두 트리거 작동하지만 "NULL"결과가 발생했을 때 문제를 일으킬 수있는 해결책을 가지고 있습니다. ORDER BY를 없애고 더 빠를 수 있습니다. 고유 한 마지막 행 인덱스 번호를 행 위치로 사용하고 부품 번호를 확인하여 새 테이블에 삽입 할 위치를 결정합니다. 또한 다른 테이블에 대해이 동일한 형식을 사용하는 세 번째 트리거를 추가하면 기본 테이블 (JD_PassData) 로의 초기 이동이 실패합니다. 왜 아직 확실하지 않습니다.

ALTER TRIGGER NewT3650 JD_Passdata ON INSERT AFTER 등 INSERT T3_650_TestData (serialNumber를, PARTNUMBER 등) SELECT의 serialNumber, PARTNUMBER, AS JD_Passdata FROM passdata_ndx = (SELECT : 여기

새로운 코드 MAX (passdata_ndx) FROM JD_PassData) 및 PartNumber = 'T3_650'

관련 문제