SQL Server는 처음이 아니지만 트리거가 처음입니다. 나는 약간의 튜토리얼을 읽었으며 구문이 조금 혼란 스럽다는 것을 솔직히 알기 원합니다.SQL Server 2008 트리거
특정 값으로 설정된 필드를 확인한 다음 동일한 테이블의 다른 필드를 업데이트하는 트리거를 만들려고합니다.
는 희망 아래 코드 자체에 대한 이야기되고 문제는 사람ALTER TRIGGER updateCompletedDate
ON projects
AFTER INSERT, UPDATE
AS
IF UPDATE(status)
BEGIN
UPDATE projects
SET date_complete = GETDATE()
FROM inserted
WHERE inserted.status = 'Completed'
AND projects.date_complete = '1900-01-01'
END
위의 코드는 내가 바라던 효과가 없습니다에게 명백 할 것이다. 행을 업데이트하고 상태를 Completed
으로 설정하면 date_complete
열이 기본값 인 1900-01-01
으로 유지됩니다.
감사
은 marc_s의 의견에 따라 경찰 지금 작동 다음에 트리거를 수정했습니다. 수정 사항은 where 절에 AND inserted.id = projects.id
이 추가 된 것입니다.
ALTER TRIGGER updateCompletedDate
ON projects
AFTER INSERT, UPDATE
AS
IF UPDATE(status)
BEGIN
UPDATE projects
SET projects.date_complete = GETDATE()
FROM inserted
WHERE inserted.status = 'Completed'
AND inserted.id = projects.id
AND projects.date_complete = '1900-01-01'
END
모두에게 감사드립니다.
난 당신이 * *은'삽입 업데이트 삽입 된 해당 행을/연결있어 표시되지 않습니다 다음
WHERE
절에 같은같은 또는 무언가가 있어야한다 'pseudo table을'Projects' 테이블의 행에 추가하십시오. WHERE 절에는'inserted.ID = projects.ID' 또는 이와 비슷한 것이 있어야합니다. 또한 :'date_complete'는 실제로 그 값입니까, 아니면 데이터베이스에서'NULL'입니까? 그리고 GUI에서'1900-01-01'로 표시 되었습니까? 또한 ** ** ** ** ** 부분을 포함하기 때문에'DATETIME' 열과 **주의 **하십시오! –
먼저 "AND projects.date_complete = '1900-01-01'"조건없이 트리거를 사용해보십시오. 완벽하게 작동하면 문제는 날짜 비교와 관련이 있습니다. – Veera
건배. marc_s - 일자 필드의 디폴트는 '1900-01-01'입니다. null이 아닙니다. 내가 꽤 많이 트리거했기 때문에 where 절의 inserted.id = projects.id 비교를 살펴볼 것입니다. Veera - 감사합니다. – Urbley