Udostępnij za pośrednictwem


Dodawanie procedurę przechowywaną doSQL Server

Ważna informacjaWażne:

Ta funkcja zostanie usunięta z przyszłej wersji programu Microsoft SQL Server. Nie należy stosować tej funkcji w nowych projektach oraz jak najszybciej należy zmodyfikować aplikacje, w których obecnie jest używana ta funkcja. Użyj integracji CLR.

Biblioteka DLL, która zawiera funkcji rozszerzona procedura składowana działa jako rozszerzenie SQL Server.Aby zainstalować plik DLL, skopiuj plik do katalogu, takich jak ten, który zawiera standardowe SQL Server pliki DLL (C:\Program Files\Microsoft SQL Server\MSSQL10_50.x\MSSQL\Binn domyślnie).

Po rozszerzone procedury przechowywanej DLL zostały skopiowane na serwer, SQL Server administrator systemu należy zarejestrować do SQL Server każdej funkcja rozszerzona procedura składowana w pliku DLL.Można to zrobić za pomocą sp_addextendedproc systemowa procedura składowana.

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

Administrator systemu należy dokładnie przeczytać rozszerzona procedura składowana, aby zapewnić, że nie zawiera szkodliwych lub szkodliwy kod przed dodaniem go do serwera i udzielanie wykonać uprawnienia do innych użytkowników.Sprawdź poprawność wszystkich danych wejściowych użytkownika.Nie można łączyć dane wejściowe użytkownika przed sprawdzaniem poprawności go.Nigdy nie można wykonać polecenia zbudowane z użytkownikiem unvalidated.Aby uzyskać więcej informacji na temat sprawdzania poprawności danych wejściowych Zobacz Iniekcji SQL.

Pierwszy parametr sp_addextendedproc Określa nazwę funkcji, a drugi parametr określa nazwę biblioteki DLL, w którym znajduje się ta funkcja.Zaleca się, aby określić pełną ścieżka pliku DLL.

Ważna informacjaWażne:

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

Nazwa funkcja określonych w sp_addextendedproc musi być dokładnie taka sama, w tym przypadek, jako nazwa funkcja DLL.Na przykład, to polecenie rejestruje funkcja xp_hello, znajduje się w bibliotece dll, o nazwie xp_hello.dll, jak SQL Server rozszerzona procedura składowana:

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

Jeśli określono nazwę funkcja w sp_addextendedproc dokładnie dopasowanie nazwę funkcja w bibliotece DLL, Nowa nazwa będzie zarejestrowany w SQL Server, ale nazwa będzie bezużyteczny.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 w sp_addextendedproc odpowiada dokładnie nazwę funkcja w bibliotece DLL i porządek sortowanie SQL Server wystąpienie jest rozróżniana wielkość liter, użytkownik może wywołać rozszerzona procedura składowana, używając dowolnej kombinacji liter małe i wielkie przypadek nazwy.

--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 sortowania SQL Server rozróżnia wystąpienie SQL Server nie będzie w stanie wywołać rozszerzona procedura składowana — nawet jeśli została zarejestrowana z dokładnie taką samą nazwę i sortowanie jako funkcja w bibliotece DLL--Jeśli wywołania procedury 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.