Membuat Prosedur Tersimpan yang Diperluas

Berlaku untuk:SQL Server

Penting

Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini. Gunakan Integrasi CLR sebagai gantinya.

Prosedur tersimpan yang diperluas adalah fungsi C/C++ dengan prototipe:

SRVRETCODE xp_extendedProcName **(**SRVPROC *);

Menggunakan awalan xp_ bersifat opsional. Nama prosedur tersimpan yang diperluas peka huruf besar/kecil saat direferensikan dalam pernyataan Transact-SQL, terlepas dari halaman kode/urutan pengurutan yang diinstal di server. Saat Anda membangun DLL:

  • Jika titik masuk diperlukan, tulis fungsi DllMain.

    Fungsi ini bersifat opsional; jika Anda tidak menyediakannya dalam kode sumber, pengkompilasi menautkan versinya sendiri, yang tidak melakukan apa pun kecuali mengembalikan TRUE. Jika Anda menyediakan fungsi DllMain, sistem operasi memanggil fungsi ini saat utas atau proses dilampirkan atau terlepas dari DLL.

  • Semua fungsi yang dipanggil dari luar DLL (semua prosedur tersimpan yang diperluas Efunctions) harus diekspor.

    Anda dapat mengekspor fungsi dengan mencantumkan namanya di bagian EXPORTS dari file .def, atau Anda dapat mengawali nama fungsi dalam kode sumber dengan __declspec(dllexport), ekstensi pengkompilasi Microsoft (Perhatikan bahwa __declspec() dimulai dengan dua garis bawah).

File-file ini diperlukan untuk membuat DLL prosedur tersimpan yang diperluas.

File Deskripsi
Srv.h File header API Prosedur Tersimpan yang Diperluas
Opends60.lib Impor pustaka untuk Opends60.dll

Untuk membuat DLL prosedur tersimpan yang diperluas, buat proyek jenis Pustaka Dynamic Link. Untuk informasi selengkapnya tentang membuat DLL, lihat dokumentasi lingkungan pengembangan.

Sangat disarankan agar semua DLL prosedur tersimpan yang diperluas mengimplementasikan dan mengekspor fungsi berikut:

__declspec(dllexport) ULONG __GetXpVersion()  
{  
   return ODS_VERSION;  
}  

Catatan

__declspec(dllexport) adalah ekstensi kompilator khusus Microsoft. Jika pengkompilasi Anda tidak mendukung arahan ini, Anda harus mengekspor fungsi ini dalam file DEF Anda di bawah bagian EKSPOR.

Ketika SQL Server dimulai dengan bendera pelacakan -T260 atau jika pengguna dengan hak istimewa administrator sistem menjalankan DBCC TRACEON (260), dan jika DLL prosedur tersimpan yang diperluas tidak mendukung __GetXpVersion(), pesan peringatan (Kesalahan 8131: DLL prosedur tersimpan diperpanjang '%' tidak mengekspor __GetXpVersion().) dicetak ke log kesalahan. (Perhatikan bahwa __GetXpVersion() dimulai dengan dua garis bawah.)

Jika DLL prosedur tersimpan yang diperluas mengekspor __GetXpVersion(), tetapi versi yang dikembalikan oleh fungsi kurang dari yang diperlukan oleh server, pesan peringatan yang menyatakan versi yang dikembalikan oleh fungsi dan versi yang diharapkan oleh server dicetak ke log kesalahan. Jika Anda mendapatkan pesan ini, Anda mengembalikan nilai yang salah dari __GetXpVersion(), atau Anda mengkompilasi dengan versi srv.h yang lebih lama.

Catatan

SetErrorMode, fungsi Microsoft Win32, tidak boleh dipanggil dalam prosedur tersimpan yang diperluas.

Disarankan agar prosedur tersimpan yang diperpanjang yang berjalan lama harus memanggil srv_got_attention secara berkala sehingga prosedur dapat mengakhiri dirinya sendiri jika koneksi dimatikan atau batch dibatalkan.

Untuk men-debug DLL prosedur tersimpan yang diperluas, salin ke direktori SQL Server\Binn. Untuk menentukan executable untuk sesi penelusuran kesalahan, masukkan jalur dan nama file file file yang dapat dieksekusi Microsoft SQL Server (misalnya, C:\Program Files\Microsoft SQL Server\MSSQL13. MSSQLSERVER\MSSQL\Binn\Sqlservr.exe). Untuk informasi tentang argumen sqlservr, lihat Aplikasi sqlservr.

Lihat Juga

srv_got_attention (EXTENDED Stored Procedure API)