Compartir a través de


Agregar un procedimiento almacenado extendido a SQL Server

Se aplica a:SQL Server

Importante

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. En su lugar, use la integración con CLR.

Un archivo DLL que contiene funciones de procedimiento almacenado extendido actúa como una extensión para SQL Server. Para instalar el archivo DLL, copie el archivo en un directorio, como el que contiene los archivos DLL estándar de SQL Server (C:\Archivos de programa\Microsoft SQL Server\MSSQL12.0.x\MSSQL\Binn de forma predeterminada).

Después de copiar el archivo DLL del procedimiento almacenado extendido en el servidor, un administrador del sistema de SQL Server debe registrarse en SQL Server cada función de procedimiento almacenado extendido en el archivo DLL. Para ello, debe utilizarse el procedimiento almacenado del sistema sp_addextendedproc.

Importante

Antes de agregar el procedimiento almacenado extendido al servidor y otorgar permisos de ejecución a otros usuarios, el administrador del sistema debe revisarlo por completo para asegurarse de que no contenga código perjudicial o malintencionado. Valide todos los datos proporcionados por el usuario. No concatene la entrada del usuario antes de validarla. No ejecute nunca un comando creado a partir de una entrada de usuario no validada.

El primer parámetro de sp_addextendedproc especifica el nombre de la función y el segundo parámetro especifica el nombre del archivo DLL donde reside dicha función. Se recomienda especificar la ruta de acceso completa del archivo DLL.

Importante

Los archivos DLL existentes que no se hayan registrado con una ruta de acceso completa no funcionarán tras una actualización a SQL Server 2005 o posterior. Para corregir el problema, utilice sp_dropextendedproc con el fin de eliminar el archivo DLL del registro y, a continuación, vuelva a registrarlo con sp_addextendedproc, especificando la ruta de acceso completa.

El nombre de la función especificada en sp_addextendedproc debe ser exactamente el mismo que el nombre de la función del archivo DLL, incluidas las mayúsculas y minúsculas. Por ejemplo, este comando registra una función xp_hello, ubicada en un archivo DLL denominado xp_hello.dll, como un procedimiento almacenado extendido de SQL Server:

sp_addextendedproc 'xp_hello', 'c:\Program Files\Microsoft SQL Server\MSSQL13.0.MSSQLSERVER\MSSQL\Binn\xp_hello.dll';  

Si el nombre de la función especificada en sp_addextendedproc no coincide exactamente con el nombre de la función en el archivo DLL, el nuevo nombre se registrará en SQL Server, pero el nombre no se podrá usar. Por ejemplo, aunque xp_Hello se registra como un procedimiento almacenado extendido de SQL Server ubicado en xp_hello.dll, SQL Server no podrá encontrar la función en el archivo DLL si usa xp_Hello para llamar a la función más adelante.

--Register the function (xp_hello) with an initial upper case  
sp_addextendedproc 'xp_Hello', 'c:\xp_hello.dll';  
  
--Use the newly registered name to call the function  
DECLARE @txt varchar(33);  
EXEC xp_Hello @txt OUTPUT;  
  
--This is the error message  
Server: Msg 17750, Level 16, State 1, Procedure xp_Hello, Line 1  
Could not load the DLL xp_hello.dll, or one of the DLLs it references. Reason: 127(The specified procedure could not be found.).  

Si el nombre de la función especificada en sp_addextendedproc coincide exactamente con el nombre de la función en el archivo DLL y la intercalación de la instancia de SQL Server no distingue mayúsculas de minúsculas, el usuario puede llamar al procedimiento almacenado extendido mediante cualquier combinación de letras minúsculas y mayúsculas del nombre.

--Register the function (xp_hello)  
sp_addextendedproc 'xp_hello', 'c:\xp_hello.dll';  
  
--The following will succeed in calling xp_hello  
DECLARE @txt varchar(33);  
EXEC xp_Hello @txt OUTPUT;  
  
DECLARE @txt varchar(33);  
EXEC xp_HelLO @txt OUTPUT;  
  
DECLARE @txt varchar(33);  
EXEC xp_HELLO @txt OUTPUT;  

Cuando la intercalación de la instancia de SQL Server distingue mayúsculas de minúsculas, SQL Server no podrá llamar al procedimiento almacenado extendido, incluso si se registró exactamente con el mismo nombre y intercalación que la función en el archivo DLL, si se llama al procedimiento con otro caso.

--Register the function (xp_hello)  
sp_addextendedproc 'xp_hello', 'c:\xp_hello.dll';  
  
--The following will result in an error  
DECLARE @txt varchar(33);  
EXEC xp_HELLO @txt OUTPUT;  
  
--This is the error  
Server: Msg 2812, Level 16, State 62, Line 1  

No es necesario detener y reiniciar SQL Server.

Consulte también

sp_addextendedproc (Transact-SQL)
sp_dropextendedproc (Transact-SQL)