Udostępnij za pomocą


Procedury składowane (silnik bazy danych)

Dotyczy do:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSystem Platform Analitycznych (PDW)Baza danych SQL w Microsoft Fabric

Procedura składowana w programie SQL Server jest grupą co najmniej jednej instrukcji Transact-SQL lub odwołaniem do metody języka środowiska uruchomieniowego (CLR) programu Microsoft .NET Framework. Procedury przypominają konstrukcje w innych językach programowania, ponieważ mogą:

  • Przyjmuj parametry wejściowe i zwracaj wiele wartości jako parametry wyjściowe do programu, który je wywołuje.

  • Zawierają instrukcje programowania, które wykonują operacje w bazie danych. Te instrukcje obejmują wywoływanie innych procedur.

  • Zwróć wartość statusu do programu wywołującego, aby wskazać powodzenie lub niepowodzenie (i przyczynę niepowodzenia).

Zalety korzystania z procedur przechowywanych

Na poniższej liście opisano niektóre korzyści wynikające z używania procedur.

Zmniejszony ruch sieciowy serwera/klienta

Polecenia w procedurze są wykonywane jako pojedyncza partia kodu. Takie podejście może znacząco zmniejszyć ruch sieciowy między serwerem a klientem, ponieważ tylko wywołanie do wykonania procedury jest wysyłane przez sieć. Bez hermetyzacji kodu dostarczonej przez procedurę każda pojedyncza linia kodu musiałaby przekroczyć sieć.

Silniejsze zabezpieczenia

Wielu użytkowników i programów klienckich może wykonywać operacje na obiektach bazowych baz danych za pomocą procedury, nawet jeśli użytkownicy i programy nie mają bezpośrednich uprawnień do tych obiektów bazowych. Procedura steruje procesami i działaniami wykonywanymi i chronią bazowe obiekty bazy danych. Takie podejście eliminuje wymóg udzielania uprawnień na poziomie poszczególnych obiektów i upraszcza warstwy zabezpieczeń.

Klauzulę EXECUTE AS można określić w instrukcji CREATE PROCEDURE , aby umożliwić personifikację innego użytkownika lub umożliwić użytkownikom lub aplikacjom wykonywanie określonych działań bazy danych bez konieczności bezpośredniego uprawnień do bazowych obiektów i poleceń. Na przykład niektóre akcje, takie jak TRUNCATE TABLE nie mają uprawnień do udzielenia. Aby wykonać TRUNCATE TABLE polecenie, użytkownik musi mieć ALTER uprawnienia na określonej tabeli. Przyznanie użytkownikowi ALTER uprawnień do tabeli może nie być idealne, ponieważ użytkownik skutecznie ma uprawnienia wykraczające poza możliwość obcinania tabeli. Dołączając instrukcję TRUNCATE TABLE w module i określając, że ten moduł jest wykonywany jako użytkownik, który ma uprawnienia do modyfikowania tabeli, możesz rozszerzyć uprawnienia, aby obcinać tabelę użytkownikowi, któremu udzielasz EXECUTE uprawnień do modułu.

Gdy aplikacja wywołuje procedurę za pośrednictwem sieci, widoczne jest tylko wywołanie do wykonania procedury. W związku z tym złośliwi użytkownicy nie mogą zobaczyć nazw tabel i obiektów baz danych, osadzać własnych instrukcji Transact-SQL ani wyszukiwać danych krytycznych.

Używanie parametrów procedury pomaga chronić przed atakami polegającymi na wstrzyknięciu kodu SQL. Ponieważ dane wejściowe parametru są traktowane jako dosłowna wartość, a nie jako kod wykonywalny, trudniej jest atakującemu wstawić polecenie do instrukcji Transact-SQL wewnątrz procedury i naruszyć zabezpieczenia.

Procedury można szyfrować, aby ułatwić zaciemnianie kodu źródłowego. Aby uzyskać więcej informacji, zobacz Szyfrowanie programu SQL Server.

Ponowne używanie kodu

Kod dla każdej powtarzalnej operacji bazy danych jest idealnym kandydatem do enkapsulacji w procedurach. Takie podejście eliminuje niepotrzebne ponowne zapisywanie tego samego kodu, zmniejsza niespójność kodu i umożliwia każdemu użytkownikowi lub aplikacji uzyskanie niezbędnych uprawnień dostępu do kodu i wykonanie go.

Łatwiejsza konserwacja

Gdy aplikacje klienckie wywołają procedury i zachowają operacje bazy danych w warstwie danych, wystarczy zaktualizować procedury dotyczące wszelkich zmian w bazowej bazie danych. Warstwa aplikacji pozostaje oddzielna i nie musi wiedzieć o żadnych zmianach w układach bazy danych, relacjach ani procesach.

Ulepszona wydajność

Domyślnie procedura kompiluje pierwszy raz, gdy jest wykonywana, i tworzy plan wykonania, który jest używany ponownie do kolejnych wykonań. Ponieważ procesor zapytań nie musi tworzyć nowego planu, zwykle przetwarzanie procedury zajmuje mniej czasu.

Jeśli istnieją istotne zmiany w tabelach lub danych, do których odwołuje się procedura, wstępnie skompilowany plan może spowodować spowolnienie wykonywania procedury. W takim przypadku ponowne skompilowanie procedury i wymuszenie nowego planu wykonania może poprawić wydajność.

Typy procedur składowanych

User-defined

Procedurę zdefiniowaną przez użytkownika można utworzyć w bazie danych zdefiniowanej przez użytkownika lub we wszystkich systemowych bazach danych z wyjątkiem Resource bazy danych. Tę procedurę można utworzyć w języku Transact-SQL lub jako odwołanie do metody języka środowiska uruchomieniowego (CLR) programu .NET Framework.

Temporary

Procedury tymczasowe są formą procedur zdefiniowanych przez użytkownika. Procedury tymczasowe są jak stała procedura, z tą różnicą, że są przechowywane w programie tempdb. Istnieją dwa typy procedur tymczasowych: lokalne i globalne. Różnią się one od siebie nazwami, ich widocznością i dostępnością. Lokalne procedury tymczasowe mają znak # (#) jako pierwszy znak ich nazw. Są one widoczne tylko dla bieżącego połączenia użytkownika i są usuwane po zamknięciu połączenia. Globalne procedury tymczasowe mają dwa znaki liczbowe (##) jako pierwsze dwa znaki ich nazw. Są one widoczne dla dowolnego użytkownika po ich utworzeniu i są usuwane na końcu ostatniej sesji przy użyciu procedury.

System

Procedury systemowe są zawarte w silniku bazy danych. Są one fizycznie przechowywane w wewnętrznej, ukrytej Resource bazie danych i są logicznie wyświetlane w sys schemacie każdej bazy danych zdefiniowanej przez system i zdefiniowanej przez użytkownika. Ponadto msdb baza danych zawiera również systemowe procedury składowane w dbo schemacie używanym do planowania alertów i zadań. Ponieważ procedury systemowe zaczynają się od prefiksu sp_, nie używaj tego prefiksu podczas nazywania procedur zdefiniowanych przez użytkownika. Aby uzyskać pełną listę procedur systemowych, zobacz Procedury składowane systemu.

Program SQL Server obsługuje procedury systemowe, które zapewniają interfejs z programu SQL Server do programów zewnętrznych na potrzeby różnych działań konserwacyjnych. Te procedury rozszerzone używają prefiksu xp_ . Aby uzyskać pełną listę procedur rozszerzonych, zobacz Ogólne rozszerzone procedury składowane.

Rozszerzone zdefiniowane przez użytkownika

Rozszerzone procedury umożliwiają tworzenie procedur zewnętrznych w języku programowania, takim jak C. Te procedury to biblioteki DLL, które wystąpienie programu SQL Server może dynamicznie ładować i uruchamiać.

Note

Rozszerzone procedury składowane zostaną usunięte w przyszłej wersji programu SQL Server. Nie używaj tej funkcji w nowych pracach programistycznych i zmodyfikuj aplikacje, które obecnie używają tej funkcji tak szybko, jak to możliwe. Zamiast tego utwórz procedury CLR. Ta metoda zapewnia bardziej niezawodną i bezpieczną alternatywę dla pisania rozszerzonych procedur.

Opis zadania Article
Opisuje sposób tworzenia procedury składowanej. Utwórz procedurę składowaną
Opisuje, jak modyfikować procedurę składowaną. Zmodyfikuj procedurę składowaną
Opisuje sposób usuwania procedury składowanej. Usuń procedurę składowaną
Opisuje sposób wykonywania procedury przechowywanej. Wykonaj procedurę składowaną
Opisuje sposób udzielania uprawnień w procedurze składowanej. Udzielić uprawnień do procedury składowanej
Opisuje sposób zwracania danych z procedury składowanej do aplikacji. Zwracanie danych z procedury składowanej
Opisuje sposób ponownego kompilowania procedury składowanej. Ponowne kompilowanie procedury składowanej
Opisuje sposób zmiany nazwy procedury składowanej. Zmienianie nazwy procedury składowanej
Opisuje sposób wyświetlania definicji procedury składowanej. Wyświetlanie definicji procedury składowanej
Opisuje sposób wyświetlania zależności dla procedury składowanej. Wyświetlanie zależności procedury składowanej
Opisuje sposób użycia parametrów w procedurze składowanej. Parameters