Share via


Hinzufügen einer erweiterten gespeicherten Prozedur zu SQL Server

Wichtiger HinweisWichtig

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie so bald wie möglich das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Verwenden Sie stattdessen die CLR-Integration.

Eine DLL, die erweiterte gespeicherte Prozedurfunktionen enthält, stellt eine Erweiterung von SQL Server dar. Um die DLL zu installieren, kopieren Sie die Datei in ein Verzeichnis, beispielsweise das Verzeichnis, das die zum Lieferumfang gehörenden DLL-Dateien für SQL Server enthält (standardmäßig C:\Programme\Microsoft SQL Server\MSSQL10_50.x\MSSQL\Binn).

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

SicherheitshinweisSicherheitshinweis

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 Benutzer Berechtigungen zum Ausführen der Prozedur gewährt. Überprüfen Sie alle Benutzereingaben. Verketten Sie keine Benutzereingaben, bevor Sie sie überprüft haben. Führen Sie niemals Befehle aus, die sich aus unüberprüften Benutzereingaben zusammensetzen. Weitere Informationen zum Überprüfen von Eingaben finden Sie unter SQL Injection.

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.

Wichtiger HinweisWichtig

Vorhandene DLLs, die nicht mit einem vollständigen Pfad registriert wurden, sind nach dem Update auf SQL Server 2005 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. Zum Beispiel wird mit dem folgenden Befehl die Funktion xp_hello,, die sich in der DLL mit dem Namen xp_hello.dll befindet, als erweiterte gespeicherte SQL Server-Prozedur registriert:

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

Entspricht der in sp_addextendedproc angegebene Funktionsname nicht genau dem Funktionsnamen in der DLL, dann wird der neue Name in SQL Server registriert, kann jedoch nicht verwendet werden. Wenn beispielsweise die Funktion xp_Hello als erweiterte gespeicherte Prozedur für SQL Server registriert wird, die sich in der DLL namens xp_hello.dll befindet, kann SQL Server die Funktion nicht in der DLL finden, wenn Sie die Funktion später unter Angabe des Namens xp_Hello 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 in sp_addextendedproc angegebene Funktionsname genau dem Funktionsnamen in der DLL entspricht, und die in der Sortierung von SQL Server nicht zwischen Groß- und Kleinschreibung unterschieden wird, dann kann der Benutzer die erweiterte gespeicherte Prozedur unter Angabe des Namens aufrufen, wobei dieser beliebige Kombinationen von Klein- und Großbuchstaben enthalten kann.

--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 die Sortierung von SQL Server zwischen Groß- und Kleinschreibung unterscheidet, dann kann SQL Server die erweiterte gespeicherte Prozedur nicht aufrufen, wenn sich die Groß-/Kleinschreibung des Namens im Aufruf vom registrierten Namen unterscheidet. Dies gilt auch dann, wenn die Prozedur mit dem gleichen Namen und der gleichen Sortierung wie die Funktion in der DLL registriert wurde.

--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 notwendig, SQL Server zu beenden und neu zu starten.