[SQL] 열이 수정 SQL 업데이트 트리거 만
SQL열이 수정 SQL 업데이트 트리거 만
다른 예를 살펴보면 나는 다음을 마련했지만 내가 원하는대로 작동하지 않는 것 : 나는 QtyToRepair 값이 갱신 된 경우에만 수정 된 정보를 업데이트 할 ...하지만 그렇지 않습니다 그렇게.
내가 주석 경우, 수정 된 정보는 모든 경우에 업데이트된다 다음. 내가 말했듯이 다른 예는 낙관적으로 나를 이끌었다. 모든 단서에 감사드립니다. 감사.
월터
ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
ON [dbo].[SCHEDULE]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE SCHEDULE SET modified = GETDATE()
, ModifiedUser = SUSER_NAME()
, ModifiedHost = HOST_NAME()
FROM SCHEDULE S
INNER JOIN Inserted I on S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
WHERE S.QtyToRepair <> I.QtyToRepair
END
해결법
-
==============================
1.당신은 당신의 질문에 대한 두 가지 방법이있다 :
당신은 당신의 질문에 대한 두 가지 방법이있다 :
당신의 트리거에서 1을 사용하여 업데이트 명령.
ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified] ON [dbo].[SCHEDULE] AFTER UPDATE AS BEGIN SET NOCOUNT ON; IF UPDATE (QtyToRepair) BEGIN UPDATE SCHEDULE SET modified = GETDATE() , ModifiedUser = SUSER_NAME() , ModifiedHost = HOST_NAME() FROM SCHEDULE S INNER JOIN Inserted I ON S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber WHERE S.QtyToRepair <> I.QtyToRepair END END
2를 사용하면 삽입 된 테이블과 삭제 된 테이블 간의 조인
ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified] ON [dbo].[SCHEDULE] AFTER UPDATE AS BEGIN SET NOCOUNT ON; UPDATE SCHEDULE SET modified = GETDATE() , ModifiedUser = SUSER_NAME() , ModifiedHost = HOST_NAME() FROM SCHEDULE S INNER JOIN Inserted I ON S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber INNER JOIN Deleted D ON S.OrderNo = D.OrderNo and S.PartNumber = D.PartNumber WHERE S.QtyToRepair <> I.QtyToRepair AND D.QtyToRepair <> I.QtyToRepair END
새 값이 하나 또는 다중 행, 솔루션 1 업데이트 스케줄 표하지만 솔루션 2 만 업데이트 일정 행 이전 값과 같지 않은 점에서 업데이트 된 모든 행의 이전 값과 동일한 경우 테이블 일정과 새로운 값으로 설정 QtyToRepair 열, 업데이트 명령을 사용할 때 새로운 값.
-
==============================
2.참고하시기 바랍니다 코드 내가 함께 결국 :
참고하시기 바랍니다 코드 내가 함께 결국 :
IF UPDATE (QtyToRepair) begin INSERT INTO tmpQtyToRepairChanges (OrderNo, PartNumber, ModifiedDate, ModifiedUser, ModifiedHost, QtyToRepairOld, QtyToRepairNew) SELECT S.OrderNo, S.PartNumber, GETDATE(), SUSER_NAME(), HOST_NAME(), D.QtyToRepair, I.QtyToRepair FROM SCHEDULE S INNER JOIN Inserted I ON S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber INNER JOIN Deleted D ON S.OrderNo = D.OrderNo and S.PartNumber = D.PartNumber WHERE I.QtyToRepair <> D.QtyToRepair end
-
==============================
3.QtyToRepair 처음에 업데이트되는 경우 하나 확인해야합니다.
QtyToRepair 처음에 업데이트되는 경우 하나 확인해야합니다.
ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified] ON [dbo].[SCHEDULE] AFTER UPDATE AS BEGIN SET NOCOUNT ON; IF UPDATE (QtyToRepair) BEGIN UPDATE SCHEDULE SET modified = GETDATE() , ModifiedUser = SUSER_NAME() , ModifiedHost = HOST_NAME() FROM SCHEDULE S INNER JOIN Inserted I ON S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber WHERE S.QtyToRepair <> I.QtyToRepair END END
-
==============================
4.당신은 다음을 수행 할 :
당신은 다음을 수행 할 :
ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified] ON [dbo].[SCHEDULE] AFTER UPDATE AS BEGIN SET NOCOUNT ON; IF (UPDATE(QtyToRepair)) BEGIN UPDATE SCHEDULE SET modified = GETDATE() , ModifiedUser = SUSER_NAME() , ModifiedHost = HOST_NAME() FROM SCHEDULE S INNER JOIN Inserted I ON S.OrderNo = I.OrderNo AND S.PartNumber = I.PartNumber WHERE S.QtyToRepair <> I.QtyToRepair END END
이 트리거 값이 동일인지 아닌지에 상관없이 열을 업데이트하지 때마다 발생되므로주의하시기 바랍니다.
-
==============================
5.레코드가 레코드가되어 업데이트 될 때마다 "삭제". 여기 내 예입니다 :
레코드가 레코드가되어 업데이트 될 때마다 "삭제". 여기 내 예입니다 :
ALTER TRIGGER [dbo].[UpdatePhyDate] ON [dbo].[M_ContractDT1] AFTER UPDATE AS BEGIN -- on ContarctDT1 PhyQty is updated -- I want system date in Phytate automatically saved SET NOCOUNT ON; declare @dt1ky as int if(update(Phyqty)) begin select @dt1ky = dt1ky from deleted update M_ContractDT1 set PhyDate=GETDATE() where Dt1Ky= @dt1ky end END
그것은 잘 작동합니다
from https://stackoverflow.com/questions/12137102/sql-update-trigger-only-when-column-is-modified by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 구글 스프레드 시트 "= QUERY는"() 해당 기능을 결합? (0) | 2020.06.01 |
---|---|
[SQL] MySQL의 INNER는 두 번째 테이블에서 하나의 행을 선택 가입 (0) | 2020.06.01 |
[SQL] SQL 키워드에 대한 대문자를 사용하는 좋은 이유가 있나요? [닫은] (0) | 2020.06.01 |
[SQL] 엔티티 프레임 워크에서 예외가 발생합니다 - 잘못된 개체 이름 'dbo.BaseCs' (0) | 2020.06.01 |
[SQL] 대기열로 데이터베이스 테이블을 사용하여 (0) | 2020.06.01 |