Создание расширенных хранимых процедур
Применимо к:SQL Server
Внимание
Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Используйте вместо этого интеграцию со средой CLR.
Расширенная хранимая процедура — это функция C/C++ с прототипом:
SRVRETCODE xp_extendedProcName **(**SRVPROC *);
Указание префикса xp_ необязательно. Расширенные имена хранимых процедур зависят от регистра при ссылке на инструкции Transact-SQL независимо от порядка кодовой страницы или сортировки, установленного на сервере. При создании DLL-библиотеки нужно сделать следующее.
Если необходима точка входа, напишите функцию DllMain.
Эта функция необязательна. Если ее нет в исходном коде, то компилятор компонует собственную версию, которая всего лишь возвращает значение TRUE. Если функция DllMain создана, то операционная система вызывает ее в тот момент, когда поток или процесс присоединяется к DLL-библиотеке или отсоединяется от нее.
Все функции, которые вызываются за пределами DLL-библиотеки (все расширенные хранимые процедуры и функции), должны быть экспортированы.
Вы можете экспортировать функцию, указав ее имя в разделе EXPORTS файла .def или префикс имени функции в исходном коде с помощью __declspec(dllexport), расширения компилятора Майкрософт (обратите внимание, что __declspec() начинается с двух подчеркивания.
Для создания DLL-библиотеки расширенной хранимой процедуры необходимы следующие файлы.
Файл | Description |
---|---|
Srv.h | Файл заголовка API-интерфейса расширенных хранимых процедур |
Opends60.lib | Библиотека импорта для Opends60.dll |
Чтобы создать DLL-библиотеку расширенной хранимой процедуры, создайте проект типа «Динамическая библиотека». Дополнительные сведения о создании DLL-библиотек см. в документации по среде разработки.
Настоятельно рекомендуется, чтобы все DLL-библиотеки расширенных хранимых процедур реализовали и экспортировали следующую функцию.
__declspec(dllexport) ULONG __GetXpVersion()
{
return ODS_VERSION;
}
Примечание.
Объявление __declspec(dllexport) является расширением компилятора Майкрософт. Если компилятор не поддерживает эту директиву, то функцию необходимо экспортировать в DEF-файле в раздел EXPORTS.
При запуске SQL Server с флагом трассировки -T260 или если пользователь с правами системного администратора запускает DBCC TRACEON (260), а если библиотека DLL расширенной хранимой процедуры не поддерживает __GetXpVersion(), предупреждающее сообщение (ошибка 8131: расширенная библиотека DLL хранимой процедуры "%" не экспортирует __GetXpVersion().) выводится в журнал ошибок. (Обратите внимание, что __GetXpVersion() начинается с двух символов подчеркивания.)
Если DLL-библиотека расширенной хранимой процедуры экспортирует __GetXpVersion(), но версия, возвращенная этой функцией, меньше, чем требует сервер, то в журнал ошибок заносится предупредительное сообщение, содержащее версию, возвращенную функцией, и версию, ожидаемую сервером. Если вы получите это сообщение, возвращается неверное значение из __GetXpVersion() или выполняется компиляция с более старой версией srv.h.
Примечание.
SetErrorMode, функция Microsoft Win32, не должна вызываться в расширенных хранимых процедурах.
Долго выполняющимся расширенным хранимым процедурам рекомендуется периодически вызывать функцию srv_got_attention, чтобы процедура могла завершиться при разрыве соединения или аварийного завершения пакетов.
Чтобы выполнить отладку библиотеки DLL расширенной хранимой процедуры, скопируйте ее в каталог SQL Server\Binn. Чтобы указать исполняемый файл для сеанса отладки, введите путь и имя файла исполняемого файла Microsoft SQL Server (например, C:\Program Files\Microsoft SQL Server\MSSQL13. MSSQLSERVER\MSSQL\Binn\Sqlservr.exe). Сведения о аргументах sqlservr см. в приложении sqlservr.
См. также
srv_got_attention (API-интерфейс расширенных хранимых процедур)
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по