Aggiunta di una stored procedure estesa a SQL Server
Si applica a: SQL Server
Importante
Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Usare invece la funzionalità Integrazione CLR.
Una DLL che contiene funzioni stored procedure estese funge da estensione per SQL Server. Per installare la DLL, copiare il file in una directory, ad esempio quella che contiene i file DLL standard di SQL Server (C:\Programmi\Microsoft SQL Server\MSSQL12.0.x\MSSQL\Binn per impostazione predefinita).
Dopo che la DLL della stored procedure estesa è stata copiata nel server, un amministratore di sistema di SQL Server deve registrarsi a SQL Server ogni funzione stored procedure estesa nella DLL. È possibile eseguire questa operazione utilizzando la stored procedure di sistema sp_addextendedproc.
Importante
L'amministratore di sistema deve esaminare con attenzione una stored procedure estesa per assicurarsi che non contenga codice dannoso o malware prima di aggiungerla al server e prima di concedere autorizzazioni di esecuzione ad altri utenti. Convalidare sempre input di tutti gli utenti. Non concatenare l'input dell'utente prima di convalidarlo. Non eseguire mai un comando creato dall'input dell'utente non convalidato.
Il primo parametro di sp_addextendedproc specifica il nome della funzione, mentre il secondo specifica il nome della DLL nella quale risiede la funzione. È consigliabile specificare il percorso completo della DLL.
Importante
Le DLL esistenti non registrate con un percorso completo non funzionano dopo l'aggiornamento a SQL Server 2005 o versioni successive. Per correggere il problema, utilizzare sp_dropextendedproc per annullare la registrazione della DLL e quindi sp_addextendedproc per registrarla di nuovo specificando il percorso completo.
Il nome della funzione specificato in sp_addextendedproc
deve corrispondere esattamente a quello presente nella DLL, anche nell'uso di maiuscole e minuscole. Ad esempio, questo comando registra una funzione xp_hello,
che si trova in una DLL denominata xp_hello.dll
, come stored procedure estesa di SQL Server:
sp_addextendedproc 'xp_hello', 'c:\Program Files\Microsoft SQL Server\MSSQL13.0.MSSQLSERVER\MSSQL\Binn\xp_hello.dll';
Se il nome della funzione specificata in sp_addextendedproc
non corrisponde esattamente al nome della funzione nella DLL, il nuovo nome verrà registrato in SQL Server, ma il nome non sarà utilizzabile. Ad esempio, anche se xp_Hello
è registrato come stored procedure estesa di SQL Server che si trova in xp_hello.dll
, SQL Server non sarà in grado di trovare la funzione nella DLL se si usa xp_Hello
per chiamare la funzione in un secondo momento.
--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 il nome della funzione specificata in sp_addextendedproc
corrisponde esattamente al nome della funzione nella DLL e le regole di confronto dell'istanza di SQL Server non fanno distinzione tra maiuscole e minuscole, l'utente può chiamare la stored procedure estesa usando qualsiasi combinazione di lettere minuscole e maiuscole del 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 le regole di confronto dell'istanza di SQL Server fa distinzione tra maiuscole e minuscole, SQL Server non sarà in grado di chiamare la stored procedure estesa, anche se è stata registrata con esattamente lo stesso nome e le regole di confronto della funzione nella DLL, se la routine viene chiamata con un caso diverso.
--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
Non è necessario arrestare e riavviare SQL Server.
Vedi anche
sp_addextendedproc (Transact-SQL)
sp_dropextendedproc (Transact-SQL)
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per