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

Transaksi harus ditangani di .NET atau SQL Server?

Tidak ada aturan keras dan cepat, tetapi saya melihat beberapa alasan untuk mengontrol transaksi dari tingkat bisnis:

  • Komunikasi melintasi batas penyimpanan data. Transaksi tidak harus melawan RDBMS; mereka bisa melawan berbagai entitas.

  • Kemampuan untuk mengembalikan/melakukan transaksi berdasarkan logika bisnis yang mungkin tidak tersedia untuk prosedur tersimpan tertentu yang Anda panggil.

  • Kemampuan untuk memanggil serangkaian kueri sewenang-wenang dalam satu transaksi. Ini juga menghilangkan kekhawatiran tentang jumlah transaksi.

  • Preferensi pribadi:c# memiliki struktur yang lebih elegan untuk mendeklarasikan transaksi:a using memblokir. Sebagai perbandingan, saya selalu menemukan transaksi di dalam prosedur tersimpan menjadi rumit saat melompat ke rollback/commit.

Ini mungkin atau mungkin tidak menjadi masalah tergantung pada berapa banyak transaksi yang dibuka (tidak jelas apakah ini pekerjaan tunggal, atau prosedur yang dijalankan dengan konkurensi tinggi). Saya menyarankan untuk melihat kunci apa yang ditempatkan pada objek, dan berapa lama kunci tersebut dipegang.

Ingatlah bahwa validasi mungkin harus kunci; bagaimana jika data berubah antara saat Anda memvalidasinya dan saat tindakan terjadi?

Jika adalah masalah, Anda dapat memecah prosedur yang melanggar menjadi dua prosedur, dan memanggil satu dari luar TransactionScope .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mvc-Mini-Profiler v1.7 pada proyek EF 4.1 Code-First tidak memprofilkan SQL

  2. Perbaiki:"Pernyataan BACKUP LOG tidak diizinkan saat model pemulihan SEDERHANA" di SQL Server (dan SQL Edge)

  3. Dapatkan hasil dari SQL dinamis dalam prosedur tersimpan

  4. Bagaimana TRY_CAST() Bekerja di SQL Server

  5. SQLCMD Tidak dapat menyelesaikan proses login karena keterlambatan dalam membuka koneksi server