Adicionando um procedimento armazenado estendido ao SQL Server
Aplica-se a:SQL Server
Importante
Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez disso, use a Integração CLR.
Uma DLL que contém funções de procedimento armazenado estendidas atua como uma extensão para o SQL Server. Para instalar a DLL, copie o arquivo para um diretório, como aquele que contém os arquivos DLL padrão do SQL Server (C:\Arquivos de Programas\Microsoft SQL Server\MSSQL12.0.x\MSSQL\Binn por padrão).
Depois que a DLL de procedimento armazenado estendido tiver sido copiada para o servidor, um administrador de sistema do SQL Server deverá registrar no SQL Server cada função de procedimento armazenado estendido na DLL. Isso é feito por meio do uso do procedimento armazenado de sistema sp_addextendedproc.
Importante
O administrador do sistema deve examinar inteiramente um procedimento armazenado estendido para garantir que ele não contenha código perigoso ou mal-intencionado, antes de adicioná-lo ao servidor e conceder permissões de execução a outros usuários. Valide todas as entradas de usuário. Não concatene uma entrada de usuário antes de validá-la. Nunca execute um comando construído por uma entrada de usuário inválida.
O primeiro parâmetro de sp_addextendedproc especifica o nome da função e o segundo, o nome da DLL em que reside essa função. É recomendável especificar o caminho completo da DLL.
Importante
As DLLs existentes que não foram registradas com um caminho completo não funcionarão depois da atualização para o SQL Server 2005 ou posterior. Para corrigir o problema, use sp_dropextendedproc para cancelar o registro da DLL e registrá-la novamente com sp_addextendedproc, especificando o caminho completo.
O nome da função especificada em sp_addextendedproc
deve ser exatamente igual, inclusive maiúsculas e minúsculas, ao nome da função na DLL. Por exemplo, esse comando registra uma função xp_hello,
localizada em uma dll chamada xp_hello.dll
, como um procedimento armazenado estendido do SQL Server:
sp_addextendedproc 'xp_hello', 'c:\Program Files\Microsoft SQL Server\MSSQL13.0.MSSQLSERVER\MSSQL\Binn\xp_hello.dll';
Se o nome da função especificada em sp_addextendedproc
não corresponder exatamente ao nome da função na DLL, o novo nome será registrado no SQL Server, mas o nome não será utilizável. Por exemplo, embora xp_Hello
esteja registrado como um procedimento armazenado estendido do SQL Server localizado no xp_hello.dll
, o SQL Server não poderá localizar a função na DLL se você usar xp_Hello
para chamar a função posteriormente.
--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.).
Se o nome da função especificada em sp_addextendedproc
corresponder exatamente ao nome da função na DLL e o agrupamento da instância do SQL Server não diferenciar maiúsculas de minúsculas, o usuário poderá chamar o procedimento armazenado estendido usando qualquer combinação de letras minúsculas e maiúsculas do nome.
--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;
Quando o agrupamento da instância do SQL Server diferencia maiúsculas de minúsculas, o SQL Server não poderá chamar o procedimento armazenado estendido -- mesmo que ele tenha sido registrado exatamente com o mesmo nome e agrupamento que a função na DLL -- se o procedimento for chamado com um caso diferente.
--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
Não é necessário parar e reiniciar o SQL Server.
Confira também
sp_addextendedproc (Transact-SQL)
sp_dropextendedproc (Transact-SQL)
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de