Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2008 — po uruchomieniu wyzwalacza Insert/Update, który kopiuje wartości do innej tabeli?

Całkiem proste...

CREATE TRIGGER TRG_Tasks_UI ON Tasks FOR INSERT,UPDATE
AS
SET XACT_ABORT, NOCOUNT ON

--Ignore zero row updates, inserts
IF NOT EXISTS (SELECT * FROM INSERTED) RETURN;

BEGIN TRY
    INSERT TasksHistory
       (col1, col2, ...)
    SELECT
       I.*
    FROM
       INSERTED I
       LEFT JOIN
       DELETED D ON I.key = D.Key
    WHERE
       D.Key IS NULL --insert only
       OR -- need null handling here
       I.col1 <> D.col1 OR I.col2 <> D.col2 OR ...;
END TRY
BEGIN CATCH
   IF XACT_STATE() <> 0 ROLLBACK TRANSACTION
    RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
END CATCH
GO



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SqlDateTime.MinValue !=DateTime.MinValue, dlaczego?

  2. Jak zastąpić (null) wartości z 0 wyjściem w PIVOT?

  3. SSRS zwracające inne wyniki niż procedura składowana

  4. Scal 2 bazy danych SQL Server

  5. Wyjątek braku pamięci w SQL 2008