Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Database Azure
SQLInstans
Terkelola Azure SQLAzure Synapse Analytics
Sistem Platform Analitik (PDW)
Database SQL di Microsoft Fabric
Driver OLE DB untuk SQL Server mendukung persiapan perintah untuk mengoptimalkan beberapa eksekusi satu perintah; namun, persiapan perintah menghasilkan overhead, dan konsumen tidak perlu menyiapkan perintah untuk menjalankannya lebih dari sekali. Secara umum, perintah harus disiapkan jika akan dijalankan lebih dari tiga kali.
Untuk alasan performa, persiapan perintah ditangguhkan hingga perintah dijalankan. Ini adalah perilaku default. Kesalahan apa pun dalam perintah yang sedang disiapkan tidak diketahui sampai perintah dijalankan atau operasi metaproperti dilakukan. Mengatur properti SQL Server SSPROP_DEFERPREPARE ke FALSE dapat menonaktifkan perilaku default ini.
Di SQL Server, ketika perintah dijalankan secara langsung (tanpa menyiapkannya terlebih dahulu), rencana eksekusi dibuat dan di-cache. Jika pernyataan SQL dijalankan lagi, SQL Server memiliki algoritma yang efisien untuk mencocokkan pernyataan baru dengan rencana eksekusi yang ada di cache, dan menggunakan kembali rencana eksekusi untuk pernyataan tersebut.
Untuk perintah yang disiapkan, SQL Server menyediakan dukungan asli untuk menyiapkan dan menjalankan pernyataan perintah. Saat Anda menyiapkan pernyataan, SQL Server membuat rencana eksekusi, menyimpannya dalam cache, dan mengembalikan handel ke rencana eksekusi ini ke penyedia. Penyedia kemudian menggunakan handel ini untuk menjalankan pernyataan berulang kali. Tidak ada prosedur tersimpan yang dibuat. Karena handel secara langsung mengidentifikasi rencana eksekusi untuk pernyataan SQL alih-alih mencocokkan pernyataan dengan rencana eksekusi di cache (seperti halnya untuk eksekusi langsung), lebih efisien untuk menyiapkan pernyataan daripada mengeksekusinya secara langsung, jika Anda tahu pernyataan akan dijalankan lebih dari beberapa kali.
Di SQL Server 2005 (9.x), pernyataan yang disiapkan tidak dapat digunakan untuk membuat objek sementara dan tidak dapat mereferensikan prosedur tersimpan sistem yang membuat objek sementara, seperti tabel sementara. Prosedur ini harus dijalankan secara langsung.
Beberapa perintah tidak boleh disiapkan. Misalnya, perintah yang menentukan eksekusi prosedur tersimpan atau menyertakan teks yang tidak valid untuk pembuatan prosedur tersimpan SQL Server tidak boleh disiapkan.
Jika prosedur tersimpan sementara dibuat, Driver OLE DB untuk SQL Server menjalankan prosedur tersimpan sementara, mengembalikan hasil seolah-olah pernyataan itu sendiri dijalankan.
Pembuatan prosedur tersimpan sementara dikontrol oleh Driver OLE DB untuk properti inisialisasi khusus SQL Server SSPROP_INIT_USEPROCFORPREP. Jika nilai properti SSPROPVAL_USEPROCFORPREP_ON atau SSPROPVAL_USEPROCFORPREP_ON_DROP, Driver OLE DB untuk SQL Server mencoba membuat prosedur tersimpan saat perintah disiapkan. Pembuatan prosedur tersimpan berhasil jika pengguna aplikasi memiliki izin SQL Server yang memadai.
Untuk konsumen yang jarang terputus, pembuatan prosedur tersimpan sementara dapat memerlukan sumber daya tempdb yang signifikan, database sistem SQL Server tempat objek sementara dibuat. Ketika nilai SSPROP_INIT_USEPROCFORPREP SSPROPVAL_USEPROCFORPREP_ AKTIF, prosedur tersimpan sementara yang dibuat oleh Driver OLE DB untuk SQL Server dihilangkan hanya ketika sesi yang membuat perintah kehilangan koneksinya ke instans SQL Server. Jika koneksi tersebut adalah koneksi default yang dibuat pada inisialisasi sumber data, prosedur tersimpan sementara dihilangkan hanya ketika sumber data menjadi tidak diinisialisasi.
Ketika nilai SSPROP_INIT_USEPROCFORPREP SSPROPVAL_USEPROCFORPREP_ON_DROP, Driver OLE DB untuk prosedur tersimpan sementara SQL Server dihilangkan ketika salah satu hal berikut ini terjadi:
Konsumen menggunakan ICommandText::SetCommandText untuk menunjukkan perintah baru.
Konsumen menggunakan ICommandPrepare::Unprepare untuk menunjukkan bahwa ia tidak lagi memerlukan teks perintah.
Konsumen merilis semua referensi ke objek perintah menggunakan prosedur tersimpan sementara.
Objek perintah memiliki paling banyak satu prosedur tersimpan sementara dalam tempdb. Prosedur tersimpan sementara yang ada mewakili teks perintah saat ini dari objek perintah tertentu.