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

Gabung lambat pada tabel pemicu yang Dimasukkan/Dihapus

Memasukkan ke dalam tabel sementara yang diindeks pada kolom gabungan dapat meningkatkan banyak hal saat inserted dan deleted tidak diindeks.

Anda dapat memeriksa @@ROWCOUNT di dalam pemicu sehingga Anda hanya melakukan logika ini di atas beberapa ambang batas jumlah baris meskipun pada SQL Server 2008 ini mungkin melebih-lebihkan jumlah jika pemicu dipecat sebagai hasil dari MERGE pernyataan (Ini akan mengembalikan jumlah total baris yang terpengaruh oleh semua MERGE tindakan bukan hanya yang relevan dengan pemicu spesifik tersebut).

Dalam hal ini Anda bisa melakukan sesuatu seperti SELECT @NumRows = COUNT(*) FROM (SELECT TOP 10 * FROM INSERTED) T untuk melihat apakah ambang batas terpenuhi.

Penambahan

Satu kemungkinan lain yang dapat Anda coba adalah dengan mengabaikan pemicu untuk pembaruan besar ini. Anda dapat menggunakan SET CONTEXT_INFO untuk menetapkan bendera dan memeriksa nilai ini di dalam pemicu. Anda kemudian dapat menggunakan OUTPUT inserted.*, deleted.* untuk mendapatkan nilai "sebelum" dan "setelah" untuk satu baris tanpa perlu JOIN sama sekali.

DECLARE @TriggerFlag varbinary(128)
SET @TriggerFlag = CAST('Disabled' AS varbinary(128)) 

SET CONTEXT_INFO @TriggerFlag

UPDATE YourTable
SET Bar = 'X'
OUTPUT inserted.*, deleted.* INTO @T

/*Reset the flag*/
SET CONTEXT_INFO 0x



  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 Baru di SQL Server 2019?

  2. Bagaimana menemukan kombo bidang duplikat

  3. SQL Server COALESCE () Dijelaskan

  4. PILIH nilai DISTINCT dan INSERT INTO table

  5. Apa itu prosedur tersimpan?