Membuat Prosedur Tersimpan yang Diperluas
Berlaku untuk:
SQL Server (semua versi yang didukung)
Penting
Fitur ini akan dihapus dalam versi Microsoft SQL Server mendatang. 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 ketika direferensikan dalam pernyataan transact-SQL, terlepas dari halaman kode/urutan pengurutan yang diinstal pada server. Saat Anda membuat DLL:
Jika titik masuk diperlukan, tulis fungsi DllMain.
Fungsi ini bersifat opsional; jika Anda tidak memberikannya dalam kode sumber, pengkompilasi menautkan versinya sendiri, yang tidak melakukan apa pun selain mengembalikan TRUE. Jika Anda menyediakan fungsi DllMain, sistem operasi memanggil fungsi ini saat utas atau proses terlampir atau terlepas dari DLL.
Semua fungsi yang dipanggil dari luar DLL (semua prosedur Efunctions tersimpan yang diperluas) 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 | Mengimpor pustaka untuk Opends60.dll |
Untuk membuat DLL prosedur tersimpan yang diperluas, buat proyek jenis Pustaka Tautan Dinamis. Untuk informasi selengkapnya tentang membuat DLL, lihat dokumentasi lingkungan pengembangan.
Sangat disarankan agar semua DLL prosedur tersimpan yang diperpanjang 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 direktif 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 dihentikan 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 Microsoft SQL Server file yang dapat dieksekusi (misalnya, C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\Sqlservr.exe). Untuk informasi tentang argumen sqlservr, lihat Aplikasi sqlservr.