Crear procedimientos almacenados extendidos
Importante |
---|
Esta característica se quitará en una versión futura de Microsoft SQL Server. No utilice esta característica en nuevos trabajos de desarrollo y modifique lo antes posible las aplicaciones que actualmente la utilizan. En su lugar, utilice la integración CLR. |
Un procedimiento almacenado extendido es una función con un prototipo:
SRVRETCODE xp_extendedProcName **(**SRVPROC *);
El uso del prefijo xp_ es opcional. Los nombres de procedimiento almacenado extendido distinguen mayúsculas de minúsculas cuando se hace referencia a ellos en instrucciones Transact-SQL, independientemente de la página de códigos o criterio de ordenación que se haya instalado en el servidor. Cuando genere un archivo DLL:
Si se necesita un punto de entrada, escriba una función DllMain.
Esta función es opcional; si no se proporciona en código fuente, el compilador vincula su propia versión, que sólo devuelve TRUE. Si se proporciona una función DllMain, el sistema operativo llama a esta función cuando se asocia o desasocia un proceso o subproceso en el archivo DLL.
Deben exportarse todas las funciones a las que se llama desde el exterior del archivo DLL (todas las funciones Efunction de procedimiento almacenado extendido).
Puede exportar una función indicando su nombre en la sección EXPORTS de un archivo .def o puede agregar al nombre de función un prefijo __declspec(dllexport), una extensión del compilador de Microsoft, en el código fuente (tenga en cuenta que __declspec() comienza con dos caracteres de subrayado).
Estos archivos son necesarios para crear un archivo DLL de procedimientos almacenados extendidos.
Archivo |
Descripción |
---|---|
Srv.h |
Archivo de encabezado de la API Procedimiento almacenado extendido |
Opends60.lib |
Biblioteca de importación de Opends60.dll |
Para crear un archivo DLL de procedimientos almacenados extendidos, cree un proyecto de tipo biblioteca de vínculos dinámicos. Para obtener más información sobre la forma de crear un archivo DLL, vea la documentación del entorno de desarrollo.
Se recomienda encarecidamente que todos los archivos DLL de procedimientos almacenados extendidos implementen y exporten la siguiente función:
__declspec(dllexport) ULONG __GetXpVersion()
{
return ODS_VERSION;
}
[!NOTA]
__declspec(dllexport) es una extensión de compilador específica de Microsoft. Si el compilador no admite esta directiva, debe exportar esta función en el archivo DEF, bajo la sección EXPORTS.
Si SQL Server se inicia con el marcador de seguimiento -T260 o un usuario con privilegios de administrador del sistema ejecuta DBCC TRACEON (260) y el archivo DLL de procedimientos almacenados extendidos no admite __GetXpVersion(), en el registro de errores se imprime un mensaje de advertencia (Error 8131: La DLL de procedimientos almacenados extendidos, '%', no exporta __GetXpVersion().). (Observe que __GetXpVersion() comienza con dos caracteres de subrayado.)
Si el archivo DLL de procedimientos almacenados extendidos exporta __GetXpVersion() pero la versión devuelta por la función es menor que la que requiere el servidor, en el registro de errores se imprime un mensaje de advertencia que indica la versión devuelta por la función y la versión esperada por el servidor. Si recibe este mensaje, significa que se ha devuelto un valor incorrecto de __GetXpVersion () o que la compilación se está realizando con una versión anterior de srv.h.
[!NOTA]
No debe llamarse a SetErrorMode, una función Win32 de Microsoft, en procedimientos almacenados extendidos.
Se recomienda que un procedimiento almacenado extendido de ejecución prolongada llame periódicamente a srv_got_attention para que el procedimiento pueda finalizarse si se elimina la conexión o se anula el lote.
Para depurar un archivo DLL de procedimientos almacenados extendidos, cópielo en el directorio SQL Server\Binn. Para especificar el archivo ejecutable para la sesión de depuración, escriba la ruta de acceso y el nombre de archivo del archivo ejecutable de MicrosoftSQL Server (por ejemplo, C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\Sqlservr.exe). Para obtener información acerca de los argumentos de sqlservr, vea sqlservr (aplicación).