O.F., 업데이트 트리거 데이터를 추가 두 번 열
그래서 나는 행이 다른 테이블에 업데이트 될 때를 기반으로 테이블을 업데이트하는 트리거를 구축하기 위해 시도 된 것으로. 지금까지의 방아쇠는 이렇게 보입니다.ALTER TRIGGER [dbo].[tst_update_USCATVLS_6]
ON [dbo].[IV00101]
AFTER UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @ITEMNUMBER VARCHAR(75)
SET @ITEMNUMBER = (SELECT ITEMNMBR FROM dbo.IV00101 WHERE DEX_ROW_TS = (SELECT MAX(DEX_ROW_TS) FROM dbo.IV00101))
UPDATE dbo.EXT00101 SET STRGA255 = (RTRIM(LTRIM(STRGA255))) + '_0' WHERE PT_UD_KEY = @ITEMNUMBER AND PT_UD_Number = 2
아래와 같은 테스트 업데이트를 실행하면 어떻게 될지.
UPDATE PDM.TEST.dbo.IV00101
SET USCATVLS_6 = 'OBSOLETE'
WHERE ITEMNMBR = 'HMLGDN-7563252-4'
트리거가 작동하지만 원하는 열을 두 번 업데이트합니까? 최종 결과는이 20025947756319_0 대신 20025947756319_0_0이됩니다.
이 모든 이상한 부분은 트리거를 삭제하고 동일한 테스트 업데이트를 실행 한 다음 모든 문이 실행되는 트리거 문에 있던 업데이트 문을 실행하면 데이터가 원하는대로 업데이트됩니다. 하나 개의 코드 블록이 작품으로
그래서이 실행 :
UPDATE PDM.TEST.dbo.IV00101
SET USCATVLS_6 = 'OBSOLETE'
WHERE ITEMNMBR = 'HMLGDN-7563252-4'
DECLARE @ITEMNUMBER VARCHAR(75)
SET @ITEMNUMBER = (SELECT ITEMNMBR FROM PDM.TEST.dbo.IV00101 WHERE DEX_ROW_TS = (SELECT MAX(DEX_ROW_TS) FROM PDM.TEST.dbo.IV00101))
UPDATE PDM.TEST.dbo.EXT00101 SET STRGA255 = (RTRIM(LTRIM(STRGA255))) + '_0' WHERE PT_UD_KEY = @ITEMNUMBER AND PT_UD_Number = 2
어떤 일이 내가 그것을 대단히 감사하겠습니다 일어나고 왜 저를 알아내는 데 도움이 할 수 있습니다.
친절한 안부 Z.
트리거는 두 가지 결함을 가지고있다. 첫 번째는 오직 하나의 행만 업데이트 될 것이라고 가정하는 것입니다. 이것은 트리거가 SQL Server에서 작동하는 방식이 아닙니다. 1 회에 한 번이 아니라 한 번씩 작동합니다. 두 번째 결함은 삽입 또는 삭제 된 가상 테이블을 참조하지 않는다는 것입니다. 즉, 테이블의 행을 업데이트 할 때마다 테이블의 모든 행을 업데이트합니다. –
@Sean Lange 삽입 된 테이블과 삭제 된 테이블을 참조하는 것에 대한 조언에 따라 두 개의 임시 테이블에서 데이터를 볼 수 있도록 다른 트리거를 만들었습니다. 내가 업데이트 문을 실행하면 삽입 및 삭제 테이블에 두 번 나타납니다 다시 각 테이블에 대해 4 별도의 데이터 세트를 2입니다. 고유 한 항목에 대한 정상 출력입니까? – Zajac