Создание расширенных хранимых процедур

Важное примечаниеВажно!

В будущей версии Microsoft SQL Server эта возможность будет удалена. Не используйте ее при работе над новыми приложениями и как можно быстрее измените приложения, в которых она в настоящее время используется. Пользуйтесь вместо этого интеграцией со средой CLR.

Расширенная хранимая процедура является функцией с прототипом:

SRVRETCODE xp_extendedProcName **(**SRVPROC *);

Использовать префикс xp_ необязательно. Имена расширенных хранимых процедур учитывают регистр клавиатуры, если на них ссылаются инструкции Transact-SQL, независимо от установленных на сервере кодовой странице и порядка сортировки. При создании DLL-библиотеки

  • Если необходима точка входа, напишите функцию DllMain.

    Эта функция необязательна. Если не предоставить ее исходный код, компилятор компонует собственную версию, которая лишь возвращает значение TRUE. Если написать функцию DllMain, операционная система вызывает ее, когда поток или процесс присоединяется или отсоединяется от DLL-библиотек.

  • Необходимо экспортировать все функции, которые вызываются вне DLL-библиотек (все расширенные хранимые процедуры Efunctions).

    Функцию можно экспортировать, приведя ее имя в разделе EXPORTS DEF-файла, или в исходном коде установить префикс имени функции __declspec(dllexport), расширение компилятора Майкрософт (обратите внимание, что __declspec() начинается с двойного знака подчеркивания).

Следующие файлы требуются для создания DLL-библиотеки расширенной хранимой процедуры.

File

Description

Srv.h

Файл заголовка API-интерфейса расширенной хранимой процедуры

Opends60.lib

Библиотека импорта для Opends60.dll

Чтобы создать DLL-библиотеку расширенной хранимой процедуры, создайте проект с типом Dynamic Link Library. Дополнительные сведения о создании 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.

ПримечаниеПримечание

Функция Microsoft Win32 SetErrorMode не должна вызываться в расширенных хранимых процедурах.

Рекомендуется, чтобы долго выполняющиеся расширенные хранимые процедуры периодически вызывали srv_got_attention, чтобы процедура могла завершиться при разрыве соединения или аварийного завершения пакетов.

Для отладки расширенной DLL-библиотеки хранимой процедуры скопируйте ее в каталог SQL Server\Binn directory. Чтобы задать исполняемый объект для сеанса отладки, введите путь и имя исполняемого файла MicrosoftSQL Server (например, C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\Sqlservr.exe). Сведения об аргументах sqlservr см. в разделе Приложение sqlservr.