삽입, 업데이트 및 삭제 된 행을 감사하는 데 사용되는 트리거가 있습니다. 트리거에서 이전 값과 새 값을 얻는 데 문제가 있습니다. 트리거는 루프를 사용하여 어떤 방식 으로든 변경 (삽입, 업데이트, 삭제) 된 행의 모든 값을 삽입합니다. 그러나, 내 코드 값 대신 값으로 열 이름을 반환하지 않습니다.SQL 업데이트/삭제 트리거가 제대로 작동하지 않습니다.
SELECT @COLNAME = NAME
FROM SYSCOLUMNS
WHERE COLID = @FIELD AND
ID = (SELECT ID FROM SYSOBJECTS WHERE NAME = 'FIN_HOTEL_DTL_TYPE')
SELECT @OLDVAL = SUBSTRING(@COLNAME, 2, LEN(@COLNAME)) FROM DELETED
SELECT @NEWVAL = SUBSTRING(@COLNAME, 2, LEN(@COLNAME)) FROM INSERTED
SELECT @MODBY = MODIFIED_BY FROM INSERTED
SELECT @MODDT = MODIFIED_DATETIME FROM INSERTED
그래, 나는 @ColName에 대해 많이 생각했다. 테이블의 일부가 광범위한 컬럼 (레거시 DB, 안타깝게도 내 선택이 아닌)을 가지고 있고 각 컬럼을 코드화하고 싶지 않기 때문에이 유형의 로직을 사용하고있었습니다. – mattgcon
아름다운 대답, 특히 루프에서이 작업을 피하는 것에 관한 부분. 유사한 트리거를 구현했으며 성능이 뛰어나고 루프가 없으면 더 짧고 간단합니다. – TimothyAWiseman
도움 주셔서 감사합니다. 루프를 꺼내 단순히 열을 개별적으로 참조했습니다. – mattgcon