Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pemicu SQL Server – Bagian 2 Pemicu DDL &LOGON

Di SQL Server, pemicu adalah objek database yang akan dieksekusi setiap kali peristiwa pemicu terjadi di database atau server. Pemicu memainkan peran kunci dalam mencapai persyaratan bisnis seperti memperingatkan orang yang ditargetkan berdasarkan kondisi yang dicapai, memulai pekerjaan, atau operasi lainnya. Dalam artikel sebelumnya tentang pemicu DML, kami berbicara tentang Pemicu, jenis Pemicu, dan berbagai opsi Pemicu yang tersedia untuk Pemicu DML. Dalam artikel ini, kita akan menjelajahi pemicu SQL DDL dan LOGON.

Pemicu DDL

Pemicu DDL dapat diaktifkan untuk berbagai peristiwa Server atau Database Scoped termasuk perintah DDL dan DCL. DDL adalah singkatan dari Data Definition Language yang digunakan untuk CREATE, ALTER, DROP objek apapun dan DCL adalah singkatan dari Data Control Language pernyataan seperti perintah GRANT, DENY dan REVOKE. Di bawah ini adalah karakteristik Pemicu SQL DDL.

  1. Pemicu DDL dapat dibuat pada Tingkat Basis Data atau tingkat instans Server yang mencakup berbagai macam operasi DDL atau operasi serupa DDL, mis. Perintah DCL.
  2. Pemicu DDL hanya dapat dipanggil atau diaktifkan sebagai tipe Pemicu FOR atau AFTER. SQL Server tidak mendukung BUKAN Pemicu DDL dan kita dapat melihat cara mencegah beberapa operasi DDL melalui Pemicu DDL.
  3. SQL Server memiliki fungsi bawaan seperti EVENTDATA() dan IS_MEMBER() untuk penggunaan dalam pemicu DDL untuk mendapatkan informasi lebih lanjut terkait dengan peristiwa Pemicu.
      Fungsi
    1. EVENTDATA() mengembalikan detail lengkap tentang kejadian yang dicakup Database atau Server dalam format XML dalam cakupan pemicu DDL cakupan Database atau Server atau juga pemicu Logon. Fungsi EVENTDATA() mengembalikan Detail Acara lengkap untuk sesi yang melakukan aktivitas DDL atau Logon. EVENTDATA() mengembalikan detail di bawah ini
      • Jenis Peristiwa – Jenis Peristiwa yang mengaktifkan pemicu DDL yang tersedia di tabel sys.trigger_event_types.
      • PostTime – Waktu Peristiwa dipicu atau diposting.
      • SPID – ID sesi acara.
      • ServerName – nama instance SQL Server tempat peristiwa dipicu.
      • LoginName – Nama Login SQL Server yang melakukan event.
      • UserName – Nama Pengguna Login yang akan dbo secara default.
      • DatabaseName – Nama Database tempat Pemicu DDL diaktifkan.
      • Nama Skema – Nama Skema Objek yang terpengaruh.
      • ObjectName – Nama Objek yang terpengaruh.
      • ObjectType – Jenis Objek SQL Server seperti Tabel, Tampilan, Prosedur Tersimpan.
      • TSQLCommand – Skrip T-SQL yang dieksekusi oleh pengguna yang memanggil Pemicu DDL.
      • SetOptions – SET opsi yang digunakan oleh Pengguna atau Klien seperti SSMS saat TSQLCommand dijalankan.
      • Teks Perintah – Pernyataan DDL atau DCL aktual dengan Peristiwa DDL yang ditentukan dalam tabel sys.trigger_event_types.
    2. Fungsi IS_MEMBER() mengembalikan apakah pengguna saat ini adalah anggota grup Windows atau peran Database SQL Server atau bukan.
  4. Sistem DMV sys.triggers menyimpan daftar semua pemicu cakupan Database. Kita dapat menggunakan kueri di bawah ini untuk mengambil detail semua pemicu DDL cakupan Database.
SELECT * 
FROM sys.triggers
WHERE type = 'TR';
  1. Sistem DMV sys.server_triggers menyimpan daftar semua pemicu cakupan Server dan kita dapat menggunakan kueri di bawah ini untuk mengambil detail tentang semua pemicu DDL cakupan Server.
SELECT * 
FROM sys.server_triggers;
  1. Definisi Pemicu DDL dapat dilihat jika pemicu tidak dienkripsi dengan menggunakan salah satu opsi di bawah ini dari sys.sql_modules atau menggunakan fungsi OBJECT_DEFINITION() atau menggunakan prosedur tersimpan sp_helptext.
SELECT OBJECT_SCHEMA_NAME(object_id, db_id()) Schema_name, OBJECT_NAME(object_id) Trigger_Name, definition
FROM sys.sql_modules  
WHERE object_id = OBJECT_ID(<trigger_name>);   

SELECT OBJECT_DEFINITION (OBJECT_ID(<trigger_name>)) AS ObjectDefinition; 

EXEC sp_helptext '<trigger_name>';
  1. Semua Peristiwa DDL yang mungkin tersedia di tabel sys.trigger_event_types dan dapat dilihat menggunakan kueri di bawah.
SELECT *
FROM sys.trigger_event_types;

Sintaks Pemicu DDL adalah:

CREATE TRIGGER <trigger_name>
ON < ALL SERVER | DATABASE > 
[ WITH <DDL_trigger_option> [ ,...n ] ]  
{ FOR | AFTER } <event_type>
AS { sql_statement | EXTERNAL NAME <method specifier> }  

Membuat Pemicu DDL Cakupan Basis Data

Mari buat pemicu Cakupan Basis Data untuk melacak semua Pembuatan Tabel dan masuk ke tabel Logging bernama Track_DDL_Changes menggunakan skrip di bawah ini.

CREATE TABLE Track_DDL_Changes (EventData xml, PostDtm datetime)
GO
CREATE TRIGGER TR_D_CREATETABLE
ON DATABASE
FOR CREATE_TABLE
AS
BEGIN
	INSERT INTO Track_DDL_Changes
	SELECT EVENTDATA(),GETDATE()
END
GO

Mari buat tabel baru bernama trigger_test dan verifikasi apakah acara CREATE TABLE telah diaudit atau tidak dengan menggunakan skrip di bawah ini.

CREATE TABLE Trigger_Test ( a int, b datetime);

Memilih data dari tabel Track_DDL_Changes menunjukkan peristiwa CREATE_TABLE di atas berhasil ditangkap seperti yang ditunjukkan di bawah ini:

Mengklik nilai EventData akan membuka nilai XML EVENTDATA() di jendela baru seperti yang ditunjukkan di bawah ini.

Kami dapat memverifikasi detail lengkap tentang peristiwa pemicu melalui fungsi EVENTDATA() dan karenanya fungsi EVENTDATA() akan memainkan peran penting untuk setiap pemicu DDL atau LOGON.

Kami dapat lebih meningkatkan Pemicu DDL kami dengan bantuan fungsi EVENTDATA() dan parsing XML dan mencegah siapa pun membuat tabel apa pun di database pengujian menggunakan skrip yang diberikan di bawah ini:

CREATE TRIGGER TR_D_PREVENT_CREATETABLE
ON DATABASE
FOR CREATE_TABLE
AS
BEGIN
   SELECT EVENTDATA().value  
        ('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')  
   RAISERROR ('Creation of New tables restricted in this database, Kindly contact DBA.', 16, 1)   
   ROLLBACK  
END
GO

Pembuatan pemicu Cakupan Basis Data berhasil diselesaikan dan mari kita verifikasi dengan membuat tabel lain menggunakan skrip di bawah ini.

CREATE TABLE Trigger_Test1 (a int, b datetime);

Pemicu telah mencegah kami membuat tabel baru di database ini dan juga meninggalkan pesan yang berarti bagi pengguna. Kami juga dapat menangani kejadian tercakup DDL atau Server lainnya agar sesuai dengan persyaratan.

Untuk menghapus pemicu DDL cakupan Database, kita perlu menggunakan sintaks di bawah ini:

DROP TRIGGER <trigger_name> ON DATABASE;

Dan untuk melepaskan pemicu yang baru saja kita buat, skripnya adalah

DROP TRIGGER TR_D_PREVENT_CREATETABLE ON DATABASE;

Untuk melihat pemicu DDL cakupan database di SSMS, luaskan database Test -> Programmability -> Database Triggers seperti yang ditunjukkan di bawah ini.

Mirip dengan Pemicu DML SQL, pemicu DDL dapat dijatuhkan, dinonaktifkan, atau diaktifkan hanya dengan mengklik kanan nama Pemicu seperti yang ditunjukkan di bawah ini.

Melalui T-SQL, kita dapat menjatuhkan atau menonaktifkan atau mengaktifkan pemicu DDL lingkup Database menggunakan sintaks di bawah ini:

-- DROP Database scoped DDL Trigger
DROP TRIGGER <trigger_name> ON DATABASE;
-- Enable Database scoped DDL Trigger
ENABLE TRIGGER <trigger_name> ON DATABASE;
-- Disable Database scoped DDL Trigger
DISABLE TRIGGER <trigger_name> ON DATABASE;

Untuk menonaktifkan pemicu yang telah kita buat, kita mungkin perlu menggunakan skrip di bawah ini.

-- DROP Database scoped DDL Trigger
DROP TRIGGER TR_D_PREVENT_CREATETABLE ON DATABASE;
-- Enable Database scoped DDL Trigger
ENABLE TRIGGER TR_D_PREVENT_CREATETABLE ON DATABASE;
-- Disable Database scoped DDL Trigger
DISABLE TRIGGER TR_D_PREVENT_CREATETABLE ON DATABASE;

Membuat Pemicu DDL Cakupan Server

Pemicu DDL cakupan server mengikuti sintaks yang sama dengan pemicu DDL cakupan Database kecuali bahwa peristiwa akan didasarkan pada cakupan Server.

Mari kita coba membuat pemicu DDL cakupan Server untuk mencegah pengguna membuat database baru di instance server ini menggunakan skrip di bawah ini.

CREATE TRIGGER TR_S_PREVENT_CREATEDATABASE
ON ALL SERVER
FOR CREATE_DATABASE
AS
BEGIN
   SELECT EVENTDATA().value  
        ('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')  
   RAISERROR ('Creation of New Databases restricted in this Instance, Kindly contact DBA.', 16, 1)   
   ROLLBACK  
END
GO

Saat mencoba membuat database baru menggunakan perintah di bawah ini, kami akan menerima kesalahan seperti yang ditunjukkan di bawah ini.

CREATE DATABASE DATABASE_TEST;

Di SSMS, Pemicu DDL cakupan Server di bawah Pemicu di bagian Objek Server seperti yang ditunjukkan di bawah ini.

Kita dapat menjatuhkan, menonaktifkan, atau mengaktifkan pemicu DDL lingkup Server hanya dengan mengklik kanan Pemicu DDL Cakupan Server seperti yang ditunjukkan di bawah ini.

Melalui T-SQL, kita dapat Drop atau Disable atau Enable menggunakan perintah di bawah ini.

-- DROP Server scoped DDL Trigger
DROP TRIGGER TR_S_PREVENT_CREATEDATABASE ON ALL SERVER;
-- Disable Server scoped DDL Trigger
DISABLE TRIGGER TR_S_PREVENT_CREATEDATABASE ON ALL SERVER;
-- Enable Server scoped DDL Trigger
ENABLE TRIGGER TR_S_PREVENT_CREATEDATABASE ON ALL SERVER;

Tujuan Pemicu DDL

  1. Untuk mengaudit peristiwa DDL yang terjadi di seluruh basis data atau tingkat server.
  2. Untuk mencegah kejadian DDL terjadi di seluruh database atau tingkat server.
  3. Untuk mengingatkan setiap kali ada peristiwa DDL yang terjadi di seluruh basis data atau tingkat server.

Pemicu Masuk

Pemicu Logon seperti yang ditunjukkan oleh namanya dijalankan untuk acara LOGON di SQL Server. Setelah fase Otentikasi selesai untuk acara Login, skrip Pemicu LOGON akan dieksekusi selain aktivitas Login. Jika login tidak berhasil diautentikasi, maka pemicu LOGON tidak akan diaktifkan. Pemicu logon akan terdaftar di SSMS di bawah bagian Pemicu pada Objek Server. Sintaks dari LOGON Trigger adalah sebagai berikut:

CREATE TRIGGER <schema_name.trigger_name>
ON ALL SERVER
{ FOR| AFTER } LOGON    
AS { sql_statement  [ ; ] [ ,...n ] | EXTERNAL NAME < method specifier >  [ ; ] }  

Buat Pemicu

Mari buat pemicu LOGON sederhana untuk menangkap lebih banyak informasi tentang peristiwa LOGON dari fungsi EVENTDATA() seperti yang ditunjukkan di bawah ini.

CREATE TABLE Track_LOGON_EVENTS (EventData xml, PostDtm datetime)
GO
CREATE TRIGGER TR_LOGON
ON ALL SERVER
FOR LOGON
AS
BEGIN
	INSERT INTO Track_LOGON_EVENTS
	SELECT EVENTDATA(),GETDATE();
END
GO

Pemicu LOGON di atas akan menangkap semua detail tentang aktivitas login yang serupa dengan apa yang kami perhatikan saat menggunakan fungsi EVENTDATA() di Pemicu DDL. Kita harus berhati-hati saat berencana menggunakan pemicu LOGON seolah-olah ada kesalahan logika di dalam pemicu, itu tidak akan mengizinkan siapa pun atau sebagian besar pengguna untuk terhubung ke instance SQL Server.

Untuk DROP, Nonaktifkan atau Aktifkan pemicu LOGON, kita dapat menggunakan skrip di bawah ini.

-- DROP LOGON Trigger
DROP TRIGGER TR_LOGON ON ALL SERVER;
-- Disable LOGON Trigger
DISABLE TRIGGER TR_LOGON ON ALL SERVER;
-- Enable LOGON Trigger
ENABLE TRIGGER TR_LOGON ON ALL SERVER;

Tujuan dari Pemicu LOGON

  1. Untuk mengaudit setiap peristiwa LOGON yang terjadi di server.
  2. Untuk mencegah peristiwa LOGON terjadi di server
  3. Untuk mengingatkan setiap kali ada peristiwa LOGON yang terjadi di server.

Properti Pemicu

sp_settriggerorder

sp_settriggerorder digunakan untuk menentukan urutan eksekusi pemicu hanya untuk pemicu pertama dan terakhir. Jika ada lebih dari 2 pemicu DML dalam sebuah tabel, misalkan 5 pemicu DML, maka kita dapat menentukan pemicu DML pertama dan pemicu DML terakhir, tetapi tidak dapat menentukan urutan 3 pemicu di tengah.

Catatan: Menyetel opsi PERTAMA atau TERAKHIR khusus untuk kategori Peristiwa tertentu untuk pemicu DML. Misalnya dalam tabel yang memiliki 3 pemicu INSERT, kita dapat menentukan pemicu INSERT mana yang PERTAMA dan pemicu INSERT mana yang TERAKHIR. Jika Anda memiliki 3 pemicu pada tabel seperti INSERT, UPDATE, dan DELETE, maka kondisi urutan Pemicu tidak perlu disetel.

Sintaks untuk mengatur urutan pemicu akan seperti ini:

exec sp_settriggerorder @triggername = '<trigger_schema_name.trigger_name>' 
    , @order = 'FIRST' | 'LAST'   
    , @stmttype = '<trigger event type>'   
    , @namespace = 'DATABASE' | 'SERVER' | 'NULL'

Untuk pemicu DDL, kita dapat menentukan pemicu Cakupan Server pertama dan terakhir, lalu menentukan pemicu Cakupan Basis Data pertama dan terakhir. Misalnya, jika kita memiliki 5 pemicu Cakupan Server dan 5 pemicu Cakupan Basis Data, maka urutannya dapat ditentukan seperti ini:

  1. Pemicu pertama untuk pemicu DDL Cakupan Server
  2. 3 pemicu DDL Cakupan Server Lainnya dalam urutan acak
  3. Pemicu terakhir untuk pemicu DDL Cakupan Server.
  4. Pemicu pertama untuk pemicu DDL Cakupan Basis Data (Satu per basis data)
  5. 3 pemicu DDL Cakupan Basis Data Lainnya dalam urutan acak
  6. Pemicu terakhir untuk pemicu DDL Cakupan Basis Data.

Sehubungan dengan menyetel opsi pertama atau terakhir, pemicu DDL cakupan basis data dapat dipesan dalam basis data dan Pemicu DDL cakupan Server di tingkat Instans.

Meskipun SQL Server memungkinkan kita untuk membuat banyak pemicu pada sebuah tabel, disarankan untuk menganalisis persyaratan pemicu dengan hati-hati untuk pemeliharaan dan pemecahan masalah yang lebih baik.

Pemicu Rekursif

SQL Server juga mendukung pemicu pemanggilan secara rekursif untuk pemicu DML. Pemicu Rekursif dapat diklasifikasikan sebagai langsung atau tidak langsung seperti yang ditunjukkan di bawah ini.

Pemicu Rekursif Langsung – Pengguna atau Aplikasi memperbarui catatan di Tabel A. PEMBARUAN Pemicu A di Tabel A dipecat dan memperbarui Tabel A lagi. Karena catatan di Tabel A diperbarui melalui Pemicu, itu akan kembali memanggil Pemicu UPDATE A dan ini akan terjadi secara rekursif.

Mari kita buat Pemicu Rekursif Langsung pada tabel Penjualan menggunakan skrip di bawah ini:

CREATE TRIGGER TR_UPD_Recursive_Sales ON Sales
FOR UPDATE 
AS
BEGIN
  UPDATE Sales 
  SET SalesDate = GETDATE() 
  WHERE SalesId = (SELECT SalesId FROM Inserted)
END
GO

Jalankan script di bawah ini:

UPDATE Sales 
SET SalesDate = GETDATE() 
WHERE SalesId = 3;

Pemicu Rekursif Tidak Langsung – Pengguna atau Aplikasi memperbarui catatan di Tabel A. Pemicu UPDATE A di Tabel A dipecat dan memperbarui catatan di Tabel B. Jika Tabel B memiliki pemicu UPDATE untuk memperbarui catatan kembali ke Tabel A, itu akan memanggil pemicu UPDATE di Tabel A yang akan terjadi secara rekursif.

Mari kita buat Indirect Recursive Trigger pada tabel IDR_Test1 dan IDR_Test2 menggunakan script di bawah ini:

DROP TABLE IDR_Test1
DROP TABLE IDR_Test2

CREATE TABLE IDR_Test1 (PK int NOT NULL);
GO
INSERT INTO IDR_Test1 
values (10),(20)
GO
CREATE TABLE IDR_Test2 (PK int NOT NULL);
GO
INSERT INTO IDR_Test2
values (10),(20)
GO

CREATE TRIGGER TR_IDR_Test1
ON IDR_Test1
FOR UPDATE 
AS
BEGIN
	UPDATE IDR_Test2
	SET PK = 30
	WHERE PK IN (SELECT PK FROM inserted);
END
GO
 
CREATE TRIGGER TR_Temp2
ON IDR_Test2
FOR UPDATE 
AS
BEGIN
	UPDATE IDR_Test1
	SET PK = 30
	WHERE PK IN (SELECT PK FROM inserted);
END
GO

Jalankan script di bawah ini:

UPDATE IDR_Test1
SET PK = 1
WHERE PK = 10;

Untuk menghindari jenis pemanggilan pemicu Rekursif ini di tingkat Database, SQL Server memiliki opsi yang disebut RECURSIVE_TRIGGERS di setiap tingkat database untuk memecahkan pemicu Pemicu Rekursif. Secara default, opsi Pemicu rekursif diatur ke False untuk database. Aktifkan hanya jika diperlukan setelah mempertimbangkan dengan cermat dampak kinerja atau perubahan data yang terlibat.

Di SSMS, klik kanan Database pengujian kami -> Pilih Properties -> Klik Opsi dan gulir ke bawah untuk melihat opsi Pemicu Rekursif diaktifkan atau tidak seperti yang ditunjukkan di bawah ini. Untuk Test Database, disetel ke False karena False adalah nilai default untuk opsi Pemicu Rekursif. Untuk mengaktifkan opsi Pemicu Rekursif untuk database tertentu, cukup klik nilai tarik-turun, ubah ke True, lalu klik OK.

Melalui T-SQL, kita dapat memverifikasi opsi Pemicu Rekursif dari database Uji dengan memeriksa kolom is_recursive_triggers_on dari sys.databases DMV seperti yang ditunjukkan di bawah ini.

select name, is_recursive_triggers_on
from sys.databases
where name = 'test'

Untuk mengubah opsi Pemicu rekursif untuk database (Uji dalam contoh saya), kita dapat menjalankan skrip di bawah ini.

ALTER DATABASE [Test] SET RECURSIVE_TRIGGERS ON WITH NO_WAIT
GO

Untuk menonaktifkannya kembali ke status palsu (status default) untuk database (Uji dalam contoh saya), jalankan skrip di bawah ini.

ALTER DATABASE [Test] SET RECURSIVE_TRIGGERS OFF WITH NO_WAIT
GO

Pemicu Bertingkat

Pemicu Rekursif adalah contoh klasik Pemicu Bersarang tetapi mungkin ada beberapa kasus lain yang menghasilkan Penyarangan beberapa pemicu. SQL Server memungkinkan pemicu bersarang hingga maksimum 32 level dan pemicu apa pun yang melebihi level bersarang itu akan dibatalkan oleh SQL Server. SQL Server memiliki konfigurasi instance-wide untuk menonaktifkan opsi pemicu Bersarang. Harap dicatat bahwa pemicu Nesting of SQL Server menggunakan kode CLR atau kode terkelola tidak berada di bawah batas 32 level karena berada di luar cakupan SQL Server. Secara default, opsi pemicu bersarang akan diaktifkan di semua instance SQL Server dan kami dapat menonaktifkannya sesuai kebutuhan.

Kami dapat memverifikasi apakah opsi pemicu bersarang diaktifkan pada tingkat instans di SSMS dengan mengikuti langkah-langkah di bawah ini:

Klik kanan Server -> Pilih Properti -> Klik Lanjutan

Untuk menonaktifkan atau menonaktifkan opsi pemicu bersarang, klik tarik-turun dan ubah ke Salah, lalu klik OK .

Melalui T-SQL, kami dapat memverifikasi apakah opsi Pemicu bersarang diaktifkan dengan memeriksa kolom value_in_use di sys.configurations DMV untuk nama konfigurasi pemicu bersarang.

Untuk menonaktifkan opsi ini, kita perlu menggunakan sp_configure the system stored procedure seperti yang ditunjukkan di bawah ini:

EXEC sp_configure 'nested triggers', 0;  
GO  
RECONFIGURE;  
GO  

Dalam pemicu DML atau DDL apa pun, untuk menemukan tingkat saat ini dari SQL Server bersarang memiliki fungsi bawaan bernama TRIGGER_NESTLEVEL untuk mengembalikan jumlah pemicu yang dieksekusi untuk pernyataan saat ini yang memicu pemicu termasuk dirinya sendiri. Sintaks fungsi TRIGGER_NESTLEVEL adalah:

SELECT TRIGGER_NESTLEVEL ( object_id, <trigger_type> , <trigger_event_category> )

Di mana object_id adalah id objek pemicu, trigger_type akan menjadi AFTER untuk AFTER trigger dan IOT untuk BUKAN trigger dan trigger_event_category akan menjadi DML atau DDL.

Misalnya, jika kita hanya perlu mengizinkan level bersarang hingga 10 dan meningkatkan kesalahan setelah 10 level, maka kita dapat melakukannya pada pemicu uji seperti di sini:

IF ((SELECT TRIGGER_NESTLEVEL(OBJECT_ID('test_trigger'), 'AFTER’, 'DML’)) > 10)  
   RAISERROR ('Trigger test_trigger nested more than 10 levels.',16, -1)   

ENKRIPSI

Untuk mengenkripsi logika atau definisi pemicu, opsi WITH ENCRYPTION dapat digunakan dalam definisi pemicu yang serupa dengan semua objek SQL Server lainnya.

Jalankan SEBAGAI Klausul

Untuk menjalankan pemicu menggunakan konteks keamanan tertentu, klausa EXECUTE AS dapat digunakan dalam definisi pemicu.

TIDAK UNTUK REPLIKASI

Untuk mengidentifikasi bahwa pemicu DML tidak boleh dipanggil saat dijalankan melalui perubahan replikasi, properti NOT FOR REPLICATION akan disetel untuk semua objek di database Subscriber.

Kesimpulan

Terima kasih telah membaca artikel penuh daya tentang Pemicu DDL dan Pemicu Logon di mana kami telah memahami tujuan pemicu DDL dan Logon, cara membuat atau menjatuhkan, menonaktifkan, atau mengaktifkan pemicu ini bersama dengan cara menggunakan fungsi EVENTDATA() untuk melacak aktivitas DDL atau Logon. Selain itu, kita telah mempelajari cara menyetel urutan Eksekusi beberapa pemicu SQL DML atau DDL bersama dengan pemicu Rekursif dan Bersarang secara mendetail dan cara menangani pemicu Rekursif atau Bersarang dengan hati-hati.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang dinamakan pipa?

  2. Node.js MSSQL tedius ConnectionError:Gagal terhubung ke localhost:1433 - sambungkan ECONNREFUSED

  3. Bagaimana saya bisa mengotomatiskan tugas menghasilkan skrip di SQL Server Management Studio 2008?

  4. Dapatkan baris di mana kolom datetime =hari ini - SQL server noob

  5. INT vs Unique-Identifier untuk bidang ID di database