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.dll
registriert 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)
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für