Freigeben über


Hinzufügen einer erweiterten gespeicherten Prozedur zu SQL Server

Gilt für: SQL Server

Wichtig

Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Verwenden Sie stattdessen die CLR-Integration.

Eine DLL, die erweiterte gespeicherte Prozedurfunktionen enthält, dient als Erweiterung für SQL Server. Um die DLL zu installieren, kopieren Sie die Datei in ein Verzeichnis, z. B. die Datei, die die standardmäßigen SQL Server-DLL-Dateien enthält (C:\Programme\Microsoft SQL Server\MSSQL12.0).x\MSSQL\Binn standardmäßig).

Nachdem die DLL der erweiterten gespeicherten Prozedur auf den Server kopiert wurde, muss ein SQL Server-Systemadministrator jede erweiterte gespeicherte Prozedurfunktion in der DLL bei SQL Server registrieren. Hierzu wird die gespeicherte Systemprozedur sp_addextendedproc verwendet.

Wichtig

Der Systemadministrator muss die erweiterte gespeicherte Prozedur sorgfältig überprüfen, um sicherzustellen, dass sie keinen schädlichen oder bösartigen Code enthält, bevor er sie dem Server hinzufügt und anderen Benutzern Berechtigungen zum Ausführen der Prozedur gewährt. Überprüfen Sie alle Benutzereingaben. Verketten Sie die Benutzereingabe nicht, bevor Sie sie überprüfen. Führen Sie niemals Befehle aus, die sich aus nicht überprüften Benutzereingaben zusammensetzen.

Der erste Parameter namens sp_addextendedproc gibt den Namen der Funktion an, und der zweite Parameter gibt den Namen der DLL an, in der sich die Funktion befindet. Es ist empfehlenswert, den vollständigen Pfad der DLL anzugeben.

Wichtig

Vorhandene DLLs, die nicht mit einem vollständigen Pfad registriert wurden, sind nach dem Upgrade auf SQL Server 2005 oder höher nicht mehr funktionsfähig. Verwenden Sie zum Beheben des Problems sp_dropextendedproc, um die Registrierung der DLL aufzuheben. Registrieren Sie sie dann mit sp_addextendedproc unter Angabe des vollständigen Pfades erneut.

Der Name der im sp_addextendedproc-Parameter angegebenen Funktion muss genau (einschließlich Groß-/Kleinschreibung) dem Funktionsnamen in der DLL entsprechen. Beispielsweise registriert dieser Befehl eine Funktion xp_hello, , die sich in einer DLL mit dem Namen xp_hello.dll", als erweiterte gespeicherte SQL Server-Prozedur befindet:

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

Wenn der Name der in sp_addextendedproc angegebenen Funktion nicht exakt mit dem Funktionsnamen in der DLL übereinstimmt, wird der neue Name in SQL Server registriert, aber der Name kann nicht verwendet werden. Wenn sie z xp_Hello . B. als erweiterte gespeicherte SQL Server-Prozedur xp_hello.dllregistriert ist, kann SQL Server die Funktion in der DLL nicht finden, wenn Sie xp_Hello die Funktion später aufrufen.

--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.).  

Wenn der Name der in sp_addextendedproc der Funktion angegebenen Funktion exakt mit dem Funktionsnamen in der DLL übereinstimmt und bei der Sortierung der SQL Server-Instanz die Groß-/Kleinschreibung nicht beachtet wird, kann der Benutzer die erweiterte gespeicherte Prozedur mit einer beliebigen Kombination aus Klein- und Großbuchstaben des Namens aufrufen.

--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;  

Wenn bei der Sortierung der SQL Server-Instanz die Groß-/Kleinschreibung beachtet wird, kann SQL Server die erweiterte gespeicherte Prozedur nicht aufrufen – auch wenn sie mit genau demselben Namen und der Sortierung wie die Funktion in der DLL registriert wurde – wenn die Prozedur mit einem anderen Fall aufgerufen wird.

--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  

Es ist nicht erforderlich, SQL Server zu beenden und neu zu starten.

Weitere Informationen

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