Memanggil Prosedur Tersimpan
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Driver ODBC SQL Server Native Client mendukung urutan escape ODBC CALL dan pernyataan Transact-SQLEXECUTE untuk menjalankan prosedur tersimpan; urutan escape ODBC CALL adalah metode yang disukai. Menggunakan sintaks ODBC memungkinkan aplikasi untuk mengambil kode pengembalian prosedur tersimpan dan driver ODBC SQL Server Native Client juga dioptimalkan untuk menggunakan protokol yang awalnya dikembangkan untuk mengirim panggilan prosedur jarak jauh (RPC) antara komputer yang menjalankan SQL Server. Protokol RPC ini meningkatkan performa dengan menghilangkan banyak pemrosesan parameter dan penguraian pernyataan yang dilakukan pada server.
Catatan
Saat memanggil prosedur tersimpan SQL Server menggunakan parameter bernama dengan ODBC (untuk informasi selengkapnya, lihat Mengikat Parameter menurut Nama (Parameter Bernama)), nama parameter harus dimulai dengan karakter '@'. Ini adalah pembatasan khusus SQL Server. Driver ODBC SQL Server Native Client memberlakukan pembatasan ini lebih ketat daripada Komponen Akses Data Microsoft (MDAC).
Urutan escape ODBC CALL untuk memanggil prosedur adalah:
{[?=]callprocedure_name[([parameter][,[parameter]]...)]}
di mana procedure_name menentukan nama prosedur dan parameter menentukan parameter prosedur. Parameter bernama hanya didukung dalam pernyataan menggunakan urutan escape ODBC CALL.
Prosedur dapat memiliki parameter nol atau lebih. Ini juga dapat mengembalikan nilai (seperti yang ditunjukkan oleh penanda parameter opsional ?= di awal sintaks). Jika parameter adalah parameter input atau input/output, parameter tersebut dapat berupa literal atau penanda parameter. Jika parameter adalah parameter output, parameter harus menjadi penanda parameter karena outputnya tidak diketahui. Penanda parameter harus terikat dengan SQLBindParameter sebelum pernyataan panggilan prosedur dijalankan.
Parameter input dan input/output dapat dihilangkan dari panggilan prosedur. Jika prosedur dipanggil dengan tanda kurung tetapi tanpa parameter apa pun, driver menginstruksikan sumber data untuk menggunakan nilai default untuk parameter pertama. Contohnya:
{call procedure_name( )}
Jika prosedur tidak memiliki parameter apa pun, prosedur dapat gagal. Jika prosedur dipanggil tanpa tanda kurung, driver tidak mengirim nilai parameter apa pun. Contohnya:
{call procedure_name}
Literal dapat ditentukan untuk parameter input dan input/output dalam panggilan prosedur. Misalnya, prosedur InsertOrder memiliki lima parameter input. Panggilan berikut ke InsertOrder menghilangkan parameter pertama, menyediakan literal untuk parameter kedua, dan menggunakan penanda parameter untuk parameter ketiga, keempat, dan kelima. (Parameter diberi nomor secara berurutan, dimulai dengan nilai 1.)
{call InsertOrder(, 10, ?, ?, ?)}
Perhatikan bahwa jika parameter dihilangkan, koma yang memisahkannya dari parameter lain masih harus muncul. Jika parameter input atau input/output dihilangkan, prosedur menggunakan nilai default parameter. Cara lain untuk menentukan nilai default parameter input atau input/output adalah dengan mengatur nilai buffer panjang/indikator yang terikat ke parameter ke SQL_DEFAULT_PARAM, atau untuk menggunakan kata kunci DEFAULT.
Jika parameter input/output dihilangkan, atau jika literal disediakan untuk parameter , driver akan membuang nilai output. Demikian pula, jika penanda parameter untuk nilai pengembalian prosedur dihilangkan, driver akan membuang nilai pengembalian. Terakhir, jika aplikasi menentukan parameter nilai pengembalian untuk prosedur yang tidak mengembalikan nilai, driver mengatur nilai buffer panjang/indikator yang terikat ke parameter ke SQL_NULL_DATA.
Pemisah dalam Pernyataan PANGGILAN
Driver ODBC Klien Asli SQL Server secara default juga mendukung opsi kompatibilitas khusus untuk urutan escape ODBC { CALL } . Driver menerima pernyataan CALL hanya dengan satu set tanda kutip ganda yang memisahkan seluruh nama prosedur tersimpan:
{ CALL "master.dbo.sp_who" }
Secara default driver ODBC SQL Server Native Client juga menerima pernyataan CALL yang mengikuti aturan ISO dan mengapit setiap pengidentifikasi dalam tanda kutip ganda:
{ CALL "master"."dbo"."sp_who" }
Namun, saat berjalan dengan pengaturan default, driver ODBC SQL Server Native Client tidak mendukung penggunaan salah satu bentuk pengidentifikasi yang dikutip dengan pengidentifikasi yang berisi karakter yang tidak ditentukan sebagai legal dalam pengidentifikasi oleh standar ISO. Misalnya, driver tidak dapat mengakses prosedur tersimpan bernama "My.Proc" menggunakan pernyataan CALL dengan pengidentifikasi yang dikutip:
{ CALL "MyDB"."MyOwner"."My.Proc" }
Pernyataan ini ditafsirkan oleh driver sebagai:
{ CALL MyDB.MyOwner.My.Proc }
Server memunculkan kesalahan bahwa server tertaut bernama MyDB tidak ada.
Masalah ini tidak ada saat menggunakan pengidentifikasi kurung siku, pernyataan ini ditafsirkan dengan benar:
{ CALL [MyDB].[MyOwner].[My.Table] }