Inserting Data into 2 Tables with 1 Statement without Trigger

Biasanya kita menggunakan trigger untuk dapat melakukan memasukkan data ke dalam 2 tabel yang berbeda sekaligus. 1 tabel target yang akan dimasukkan data yang kemudian dibuatkan trigger yang kemudian trigger tersebut akan melakukan proses insert ke tabel ke 2.

Namun dalam perkembangannya, Insert Statement saat ini di memiliki sub-klausa OUTPUT. dengan memanfaatkan sub-klausa OUTPUT tersebut kita dapat membuat 1 buah statement insert yang dapat melakukan insert data ke 2 buah tabel sekaligus.

Mari kita coba praktekkan bersama-sama :

contoh kasusnya adalah sebagai berikut, di departemen TI memiliki policy bahwa setiap penambahan user baru pada sebuah aplikasi harus melakukan penggantian password dalam kurun waktu 7 hari. dalam 7 hari tersebut, user akan selalu diingatkan oleh sistem setiap login untuk pengganti passwordnya sampai user tersebut mengganti password.

Pertama kita akan membuat 2 buah tabel yaitu tabel DftrUser dan tabel TblPengingat

USE AdventureWorks;
GO 
CREATE SCHEMA [Pengguna] AUTHORIZATION dbo;
GO 
CREATE TABLE [Pengguna].[DftrUser]
    (       
[PenggunaID] [int] IDENTITY(1,1) NOT NULL,
       [Nama] VARCHAR(30) NOT NULL,
       [Password] VARCHAR(30) NOT NULL,
         CONSTRAINT [PK_PenggunaID] PRIMARY KEY CLUSTERED
             ( 
              [PenggunaID] ASC
            )ON [PRIMARY]
    ) ON [PRIMARY];
GO 

CREATE TABLE [Pengguna].[TblPengingat]
    (
        [PengingatID] [int] IDENTITY(1,1) NOT NULL,
       [PenggunaID] [int] NOT NULL,
       [Tgl] DATETIME NOT NULL,
       [SttPengguna] CHAR(1) NOT NULL,
         CONSTRAINT [PK_PengingatID] PRIMARY KEY CLUSTERED
             (
               [PengingatID] ASC
            )ON [PRIMARY]
    ) ON [PRIMARY];
GO

Sekarang kita coba untuk memasukkan data-data yang diperlukan untuk proses diatas dengan menggunakan 1 buah statement tanpa menggunakan trigger

INSERT INTO [Pengguna].[DftrUser] ( Nama, password )
OUTPUT INSERTED.PenggunaID, 
DATEADD(d,7,GETDATE()),'0'INTO[Pengguna].[TblPengingat] 
   (
        PenggunaID,
        Tgl,
        SttPengguna
    )
VALUES  ( 'Suherman','K4taSand1');

dan berikut hasilnya :

select * from [Pengguna].[DftrUser]
Go
select * from [Pengguna].[TblPengingat]
Go

image

tampak bahwa data telah masuk ke kedua tabel tersebut dengan hanya menggunakan 1 statement DML saja.

Demikian semoga bermanfaat.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.