Udostępnij za pośrednictwem


Dodawanie rozszerzona procedura składowana do programu SQL Server

Important noteImportant Note:

This feature will be removed in a future version of Microsoft SQL Server. Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible. Zamiast tego użyj integracja środowiska CLR.

A DLL that contains extended stored procedure functions acts as an extension to Microsoft SQL Server.Aby zainstalować plik DLL, skopiuj plik do katalogu, takich jak dysk zawierający standardowe pliki biblioteki DLL programu SQL Server (C:\Program Files\Microsoft SQL Server\MSSQL. x\MSSQL\Binn domyślnie).

Po rozszerzona procedura składowana DLL został skopiowany do serwera, SQL Server należy zarejestrować administrator systemu SQL Server Każdy rozszerzona procedura składowana funkcja w bibliotece DLL. Można to zrobić przy użyciu sp_addextendedproc systemu procedura przechowywana.

Security noteSecurity Note:

Administrator systemu powinni dokładnie rozszerzonej procedura przechowywana w celu zapewnienia, że nie zawiera szkodliwych lub złośliwy kod przed dodaniem go do serwera i udzielanie uprawnień innym użytkownikom wykonywania.Sprawdzanie poprawności wszystkich użytkownika dane wejściowe.Nie łączyć dane wprowadzone przez użytkownika przed jego poprawności.Nie można wykonać polecenia, na podstawie danych wprowadzonych przez użytkownika unvalidated.Aby uzyskać więcej informacji na temat sprawdzania poprawności danych wejściowych Zobacz SQL Injection.

Pierwszy parametr sp_addextendedproc Określa nazwę funkcja, a drugi parametr określa nazwę biblioteki DLL, w którym znajduje się tej funkcja.Zaleca się, że określona pełna ścieżka biblioteki DLL.

Important noteImportant Note:

Istniejące biblioteki dll, które nie zostały zarejestrowane w pełnej ścieżka nie będzie działać po uaktualnieniu do programu SQL Server 2005.Aby rozwiązać ten problem, należy użyć sp_dropextendedproc wyrejestrować biblioteki DLL, a następnie zarejestruj go ponownie z sp_addextendedproc, określając pełną ścieżka.

Nazwa funkcja, określone w sp_addextendedproc muszą być dokładnie takie same, w tym przypadek, jak nazwa funkcja w bibliotece DLL.Na przykład to polecenie rejestruje funkcja xp_hello, znajdujący się w dll xp_hello.dll, o nazwie SQL Server rozszerzona procedura składowana:

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

Jeśli określono nazwę funkcja sp_addextendedproc jest dokładnie zgodna nazwę funkcja w bibliotece DLL, Nowa nazwa zostanie zarejestrowany w SQL Server, ale nazwa nie będzie można używać. Na przykład chociaż xp_Hello jest zarejestrowany jako SQL Server rozszerzona procedura składowana znajduje się w xp_hello.dll, SQL Server Nie można znaleźć funkcja w bibliotece DLL, jeżeli używasz xp_Hello wywołać funkcja później.

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

Jeśli określono nazwę funkcja sp_addextendedproc pasuje dokładnie do nazwy funkcja w bibliotece DLL i sortowanie SQL Server wystąpienie jest rozróżniana wielkość liter, rozszerzona procedura składowana, przy użyciu dowolnej kombinacji liter małe i wielkie przypadek nazwy mogą być wywoływane przez użytkownika.

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

Podczas sortowanie z SQL Server wystąpienie jest uwzględniana wielkość liter, SQL Server Nie można wywołać rozszerzona procedura składowana — nawet wtedy, gdy został zarejestrowany z dokładnie takiej samej nazwie i sortowanie w funkcja w bibliotece DLL — Jeśli procedura nosi nazwę w innym przypadek.

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

Nie jest konieczne zatrzymać i uruchomić ponownie SQL Server.