Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chỉ kích hoạt cập nhật SQL khi cột được sửa đổi

Bạn có hai cách cho câu hỏi của mình:

1- Sử dụng Lệnh cập nhật trong Trình kích hoạt của bạn.

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- Sử dụng Tham gia giữa bảng đã chèn và bảng đã xóa

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

Khi bạn sử dụng lệnh cập nhật cho bảng SCHEDULE và Đặt QtyToRepair Cột thành giá trị mới, nếu giá trị mới bằng giá trị cũ trong một hoặc nhiều hàng, giải pháp 1 cập nhật tất cả hàng đã cập nhật trong bảng Lịch biểu nhưng giải pháp 2 chỉ cập nhật các hàng có giá trị cũ không bằng giá trị mới.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận ID của một đối tượng từ Tên của nó trong SQL Server:OBJECT_ID ()

  2. Bảng Cơ sở dữ liệu SQL Server Phương thức Xuất và Nhập

  3. CHỌN CHO TỰ ĐỘNG XML và trả về các kiểu dữ liệu

  4. Thay đổi ngôn ngữ cho phiên hiện tại trong SQL Server

  5. PARSE () so với TRY_PARSE () trong SQL Server:Sự khác biệt là gì?