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

SQL Server - setelah memasukkan pemicu - perbarui kolom lain di tabel yang sama

Itu tergantung pada tingkat rekursi untuk pemicu yang saat ini disetel pada DB.

Jika Anda melakukan ini:

SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO

Atau ini:

ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF

Pemicu di atas tidak akan dipanggil lagi, dan Anda akan aman (kecuali jika Anda mengalami semacam kebuntuan; itu bisa saja terjadi tapi mungkin saya salah).

Namun, saya tidak pikir ini ide yang bagus. Opsi yang lebih baik adalah menggunakan BUKAN pemicu . Dengan begitu Anda akan menghindari menjalankan pembaruan (manual) pertama melalui DB. Hanya yang ditentukan di dalam pemicu yang akan dieksekusi.

Pemicu INSTEAD OF INSERT akan seperti ini:

CREATE TRIGGER setDescToUpper ON part_numbers
INSTEAD OF INSERT
AS
BEGIN
    INSERT INTO part_numbers (
        colA,
        colB,
        part_description
    ) SELECT
        colA,
        colB,
        UPPER(part_description)
    ) FROM
        INSERTED
END
GO

Ini akan secara otomatis "mengganti" pernyataan INSERT asli dengan pernyataan ini, dengan panggilan UPPER eksplisit diterapkan ke part_description lapangan.

Pemicu BUKAN UPDATE akan serupa (dan saya tidak menyarankan Anda untuk membuat satu pemicu, pisahkan).

Juga, ini membahas komentar @Martin:ini berfungsi untuk penyisipan/pembaruan multibaris (contoh Anda tidak).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menilai Pengaturan Pemantauan Kinerja Basis Data Anda

  2. SSMS versi 18 – tanpa Diagram Basis Data

  3. Pilih nilai yang berbeda dari 1 kolom

  4. Cara Reset Nilai Kolom Identitas pada Tabel SQL Server - Tutorial SQL Server / T-SQL Part 43

  5. Akankah Pekerjaan SQL Server melewati proses terjadwal jika sudah berjalan?