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

pemicu dan transaksi di tabel sementara

Saya tidak berpikir Anda memahami pemicu - pemicu pemicu dikaitkan dengan pernyataan yang terkait dengannya, daripada saat transaksi dilakukan. Dua skrip:

Skrip 1:

create table T1 (
    ID int not null,
    Val1 varchar(10) not null
)
go
create table T2 (
    ID int not null,
    Val2 varchar(10) not null
)
go
create trigger T_T1_I
on T1
after insert
as
    insert into T2 (ID,Val2) select ID,Val1 from inserted
go
begin transaction
insert into T1 (ID,Val1)
select 10,'abc'
go
RAISERROR('Run script 2 now',10,1) WITH NOWAIT
WAITFOR DELAY '00:01:00'
go
commit

Skrip 2:

select * from T2 with (nolock)

Buka dua koneksi ke DB yang sama, letakkan satu skrip di setiap koneksi. Jalankan skrip 1. Saat muncul pesan "Jalankan skrip 2 sekarang", alihkan ke koneksi lain. Anda akan melihat bahwa Anda dapat memilih data yang tidak dikomit dari T2, meskipun data tersebut disisipkan oleh pemicu. (Ini juga menyiratkan bahwa kunci yang sesuai ditahan di T2 oleh skrip 1 hingga pemicu dijalankan).

Karena ini menyiratkan bahwa hal yang setara dengan apa yang Anda minta adalah memasukkan saja ke dalam tabel dasar dan menahan transaksi Anda tetap terbuka, Anda dapat melakukannya.

Jika Anda ingin menyembunyikan bentuk tabel yang sebenarnya dari pengguna, buat tampilan dan tulis pemicunya untuk memperbarui tabel dasar. Seperti yang dinyatakan di atas, segera setelah Anda melakukan operasi DML terhadap tampilan, pemicu akan diaktifkan, dan Anda akan menahan kunci pada tabel dasar. Bergantung pada tingkat isolasi transaksi dari koneksi lain, mereka mungkin melihat perubahan Anda, atau diblokir hingga transaksi dilakukan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kinerja SQL Server TOP IO Query -1

  2. Pencarian metadata SQL Server 2005 untuk mendapatkan parameter prosedur tersimpan

  3. nilai kolom dalam satu baris

  4. Filestream di Sql Server 2008 Express

  5. Cara memeriksa Tanggal minimum di setiap pengamatan dan memperbarui bendera secara dinamis