Perbedaan antara batch SQL, pernyataan dan RPC?


35

Apa perbedaan antara kumpulan SQL, pernyataan T-SQL dan Panggilan Prosedur Jarak Jauh?
Bagaimana saya bisa tahu jika bagian dari kode T-SQL adalah kumpulan atau pernyataan?

Jawaban:


25

Yah, saya kira Anda berbicara sebagian besar tentang kelas Profiler, tetapi penjelasannya tetap ada.

Kumpulan SQL adalah kumpulan satu atau lebih pernyataan yang dikelompokkan bersama dan dipisahkan oleh pernyataan GO. EG: lebih banyak pernyataan SELECT dan INSERT membentuk batch jika mereka memiliki GO di akhir.

Panggilan RPC adalah panggilan yang berasal dari aplikasi klien ke database. EG: layanan windows, aplikasi web, aplikasi windows, apa pun yang membutuhkan koneksi ke database sebenarnya membuat panggilan RPC.

Sekarang, di Profiler Anda akan melihat semua yang menyentuh server database. Kumpulan dari Management Studio, panggilan RPC (yang merupakan batch atau panggilan prosedur tersimpan) dari aplikasi eksternal, eksekusi prosedur dari Management Studio.

Masing-masing terdiri dari pernyataan TSQL, jadi kelas Profiler ini berguna jika Anda ingin memperluas eksekusi lebih lanjut, untuk melihat apa yang sebenarnya dieksekusi. Apa yang disisipkan, pilih .. dll

Cara termudah untuk melihatnya di Profiler adalah dengan mengaktifkan hanya panggilan End RPC, atau End batch call dan Anda akan melihat semua statistik yang diperlukan di sana (durasi, IO, CPU). Kemudian, bergerak lebih jauh dengan mengaktifkan kelas Pernyataan TSQL dan menggali lebih dalam.


4
+1 Hanya untuk menentukan, GOapakah terminator batch yang diterima dan default dari klien populer yang kami gunakan (yaitu SSMS dan sqlcmd), tetapi perlu dicatat bahwa GOstring aktual sebagai terminator batch dapat berubah dan dapat dikonfigurasi.
Thomas Stringer

1
"Panggilan RPC (yang merupakan panggilan batch atau prosedur tersimpan)" . Jadi semuanya pada akhirnya adalah RPC? Bisakah Anda mengklarifikasi itu?
Iain Samuel McLean Penatua

Tidak, saya ingin mengatakan bahwa panggilan RPC dibentuk dari panggilan prosedur tersimpan atau kumpulan lebih banyak pernyataan. Apa yang sebenarnya Anda lihat dalam acara Profiler ini adalah prosedur tunggal atau kumpulan lebih banyak pernyataan.
Marian

Silakan lihat beberapa penjelasan di sini . Beberapa info lain di sini .
Marian

14

Pernyataan Batch vs T-SQL

Ini jelas didefinisikan dalam SQL Server BOL di sini

Batch adalah sekelompok satu atau lebih pernyataan Transact-SQL yang dikirim secara bersamaan dari aplikasi ke SQL Server untuk dieksekusi. Go adalah pemisah batch yang digunakan dalam sebagian besar aplikasi klien termasuk SSMS.

SQL Server mengkompilasi pernyataan batch menjadi satu unit yang dapat dieksekusi, yang disebut rencana eksekusi. Pernyataan dalam rencana eksekusi kemudian dieksekusi satu per satu.

Dalam istilah sederhana berdasarkan pada pemahaman saya, RPC adalah ketika Anda menjalankan proc yang disimpan menggunakan API klien (misalnya dalam ADO.net CommandObject. Execute method)

Penjelasan lebih rinci dapat ditemukan di salah satu posting newsgroup internet di sini :

RPC "vs" batch "adalah mode eksekusi TDS yang digunakan ADO.NET (atau klien SQL Server). Ketika pernyataan SQL sederhana tanpa parameter dieksekusi, kami menggunakan" batch ". Ketika proc yang tersimpan dijalankan, kami menggunakan RPC (ini tidak sama dengan RPC sebagai panggilan prosedur jaringan jarak jauh yang berdiri sendiri, kami kebetulan memanggil mode ini RPC di TDS (protokol jaringan SQL Server)). Juga, jika Anda menjalankan batch dengan parameter, kita benar-benar menggunakan proc yang tersimpan yang disebut sp_executesql, dan meneruskan pernyataan SQL itu sendiri dan parameter lainnya ke sana, sehingga ia juga ditampilkan sebagai RPC.


Manajer Program Pablo Castro - Tim ADO.NET
Microsoft Corp.


jadi jika satu pernyataan dalam batch gagal, seluruh batch dibatalkan secara otomatis?
MonsterMMORPG

Tidak, setiap pernyataan dalam kumpulan dilakukan secara otonom, kecuali jika kumpulan itu di dalam transaksi aktif atau Anda menyetel IMPLICIT_TRANSACTIONS HIDUP. Batch dan transaksi adalah dua konsep yang berbeda. Saya tahu bahwa pertanyaannya sudah sangat lama, saya akan meninggalkan ini untuk pembaca di masa mendatang.
spaghettidba
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.