Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2016:tworzenie procedury składowanej

Procedura składowana to grupa instrukcji SQL skompilowanych w jedną. Procedury składowane mogą obejmować logikę biznesową i inne konstrukcje programistyczne.

W SQL Server procedura składowana to grupa składająca się z co najmniej jednej instrukcji Transact-SQL lub odwołanie do metody języka CLR (Common Runtime Language) Microsoft .NET Framework.

Programowalność

Ale procedura składowana to coś więcej niż tylko długi skrypt. Jest to skrypt, który został zapisany w SQL Server specjalnie w Procedury składowane węzeł i może:

  • Zaakceptuj parametry wejściowe (i zwróć wiele wartości w postaci parametrów wyjściowych do programu wywołującego).
  • Zawierają instrukcje programowania.
  • Zwróć wartość statusu do programu wywołującego, aby wskazać sukces lub niepowodzenie oraz przyczynę każdego niepowodzenia.

Procedury składowane często zawierają logikę biznesową. Na przykład procedura składowana może akceptować parametry, które są do niej przekazywane, i testować te parametry za pomocą IF sprawozdania. Np. jeśli parametr ma jedną wartość, zrób to, jeśli to inna wartość, zrób to.

Procedury składowane mogą poprawić wydajność aplikacji, ponieważ procedura składowana jest analizowana i optymalizowana zaraz po utworzeniu, a następnie przechowywana w pamięci. Uruchamianie zapytania warunkowego za pomocą procedury składowanej może być niezwykle szybkie — w porównaniu z aplikacją, która wysyła zapytanie przez sieć do serwera SQL, a następnie wszystkie dane są do niego zwracane przez sieć, dzięki czemu może je przefiltrować i wybrać tylko te rekordy, które go interesują.

Zalety procedur zapisanych

Oto niektóre z głównych zalet korzystania z procedur składowanych:

Korzyść Wyjaśnienie
Programowanie modułowe Możesz napisać procedurę składowaną raz, a następnie wywoływać ją wielokrotnie, z różnych części aplikacji (a nawet z wielu aplikacji).
Wydajność Procedury przechowywane zapewniają szybsze wykonywanie kodu i zmniejszają ruch w sieci.
  • Szybsze wykonywanie:procedury składowane są analizowane i optymalizowane zaraz po ich utworzeniu, a procedura składowana jest przechowywana w pamięci. Oznacza to, że będzie działać znacznie szybciej niż wysyłanie wielu wierszy kodu SQL z aplikacji do SQL Server. Wykonanie tego wymaga, aby SQL Server kompilował i optymalizował kod SQL przy każdym uruchomieniu.
  • Zmniejszony ruch w sieci:wysyłanie wielu wierszy kodu SQL przez sieć do programu SQL Server wpłynie na wydajność sieci. Jest to szczególnie ważne, jeśli masz setki linii kodu SQL i/lub masz dużą aktywność w swojej aplikacji. Uruchomienie kodu na serwerze SQL Server (jako procedury składowanej) eliminuje potrzebę wysyłania tego kodu przez sieć. Jedynym ruchem sieciowym będą dostarczone parametry i wyniki dowolnego zapytania.
Bezpieczeństwo Użytkownicy mogą wykonywać procedurę składowaną bez konieczności bezpośredniego wykonywania jakichkolwiek instrukcji. Dlatego procedura składowana może zapewnić zaawansowaną funkcjonalność bazy danych użytkownikom, którzy normalnie nie mieliby dostępu do tych zadań, ale ta funkcjonalność jest udostępniana w ściśle kontrolowany sposób.

Jak utworzyć procedurę składowaną

Aby utworzyć procedurę składowaną, użyj CREATE PROCEDURE instrukcja, po której następuje kod, który tworzy procedurę składowaną. Jeśli twoja procedura składowana ma akceptować parametry, muszą one być dołączone po nazwie.

CREATE PROCEDURE myStoredProcedure AS
...

OR

CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS
...

Utworzymy teraz procedurę składowaną opartą na jednym z widoków, które utworzyliśmy wcześniej — RecentAlbums widok.

Ten widok zwraca wszystkie albumy wydane w ciągu ostatnich 20 lat. Jest to w porządku, o ile wystarczy spojrzeć tylko 20 lat wstecz. Ale co, jeśli chcesz, aby użytkownik wybrał, ile lat ma obejmować?

Procedura składowana może rozwiązać ten problem.

Stworzymy procedurę składowaną, która akceptuje parametr. Wartość parametru będzie liczbą lat do przeszukania wstecz. Dlatego ta wartość może być określona przez użytkownika za każdym razem, gdy wykonuje on procedurę składowaną.

  1. Zaprojektuj procedurę składowaną

    Otwórz nowe okno zapytania i dodaj kod procedury składowanej.

    W naszym przypadku skopiujemy/wkleimy kod z RecentArtists wyświetlić i zmodyfikować górną część, tak aby stała się procedurą składowaną.

    Dodamy parametr o nazwie @Count to określi, ile lat powinna mieć procedura składowana wstecz.

    Zastąpimy więc zakodowaną na stałe wartość 20 z @Count

    Przykładowy kod

    Oto kod z naszego przykładu:

    CREATE PROCEDURE spRecentAlbums @Count int
    AS
    SELECT  Albums.ReleaseDate, 
            Albums.AlbumName, 
            Genres.Genre, 
            Artists.ArtistName,
            Artists.ActiveFrom
    FROM Albums 
    INNER JOIN
            Artists ON 
            Albums.ArtistId = Artists.ArtistId 
            INNER JOIN
                Genres ON 
                Albums.GenreId = Genres.GenreId
    WHERE   (Albums.ReleaseDate > DATEADD(year, - @Count, GETDATE()));
  2. Utwórz zapisaną procedurę

    Gdy wszystko wygląda dobrze, możesz wykonać instrukcję, aby utworzyć procedurę składowaną.

    Kliknij Wykonaj aby utworzyć procedurę składowaną.

    Po utworzeniu procedury składowanej można ją zobaczyć w Eksploratorze obiektów (może być konieczne odświeżenie Procedur składowanych najpierw węzeł).

  3. Wykonaj procedurę zapisaną

    Teraz, po utworzeniu, możesz wykonać procedurę składowaną.

    Otwórz nowe okno zapytania, dodaj to:

    EXEC spRecentAlbums @Count = 5;

    Teraz kliknij Wykonaj z paska narzędzi.

    Procedura składowana zwróci wszystkie albumy wydane w ciągu ostatnich 5 lat.

  4. Wypróbuj różne parametry

    Spróbuj zmienić wartość parametru, aby zobaczyć, jak wpływa to na wyniki.

    Możesz także uruchamiać wiele instrukcji jedna po drugiej. Dla każdego stwierdzenia pojawi się nowe okienko wyników.

Szablon procedury przechowywanej

W SQL Server 2016 można utworzyć procedurę składowaną, klikając prawym przyciskiem myszy Procedury składowane w Eksploratorze obiektów i wybierając Nowy> Procedura przechowywana... lub Nowe> Natywnie skompilowana procedura składowana... .

Spowoduje to otwarcie szablonu, który jest gotowy do wypełnienia według własnej procedury.

Wykonaj procedurę przechowywaną za pomocą GUI

Do wykonania procedury składowanej można również użyć graficznego interfejsu użytkownika.

  1. Uruchom procedurę wykonania Okno dialogowe

    W Eksploratorze obiektów kliknij prawym przyciskiem myszy procedurę składowaną i wybierz Wykonaj procedurę składowaną... .

  2. Parametry zasilania

    Wprowadź wartość dla dowolnych parametrów wymaganych przez procedurę składowaną, a następnie kliknij OK .

  3. Wyniki

    Wyniki są wyświetlane.

Zmień procedurę składowaną

Jeśli chcesz zmodyfikować istniejącą procedurę składowaną, po prostu zastąp CREATE z ALTER (wraz ze zaktualizowaną procedurą).

Ten przykład modyfikuje procedurę składowaną w taki sposób, że wyniki są sortowane według daty wydania w kolejności malejącej:

ALTER PROCEDURE spRecentAlbums @Count int
AS
SELECT  Albums.ReleaseDate, 
        Albums.AlbumName, 
        Genres.Genre, 
        Artists.ArtistName,
        Artists.ActiveFrom
FROM Albums 
INNER JOIN
        Artists ON 
        Albums.ArtistId = Artists.ArtistId 
        INNER JOIN
            Genres ON 
            Albums.GenreId = Genres.GenreId
WHERE   (Albums.ReleaseDate > DATEADD(year, - @Count, GETDATE()))
ORDER BY Albums.ReleaseDate DESC;

Procedury przechowywane w systemie

SQL Server zawiera dużą liczbę systemowych procedur składowanych, które pomagają w zadaniach administracyjnych baz danych. Wiele zadań, które można wykonać za pomocą GUI, można wykonać za pomocą systemowej procedury składowanej. Na przykład niektóre czynności, które można wykonać za pomocą systemowych procedur składowanych, obejmują:

  • Konfiguruj konta bezpieczeństwa
  • Skonfiguruj połączone serwery
  • Utwórz plan konserwacji bazy danych
  • Utwórz katalogi wyszukiwania pełnotekstowego
  • Dodaj zdalny login
  • Skonfiguruj replikację
  • Ustaw zaplanowane zadania
  • i wiele więcej...

Systemowe procedury składowane mają przedrostek sp_ , więc najlepiej jest unikać używania tego przedrostka do własnych procedur.

Konwencje nazewnictwa

Dobrym pomysłem jest opracowanie spójnej konwencji nazewnictwa dla procedur składowanych (i wszystkich innych obiektów w bazie danych).

Niektórzy ludzie poprzedzają swoje procedury składowane przedrostkiem usp_ (aby wskazać procedurę składowaną zdefiniowaną przez użytkownika), inni rozpoczynają ją od słowa kluczowego SQL, takiego jak select , wstaw , aktualizacja , usuń . Inni używają skrótu nazwy aplikacji.

Niektórzy używają podkreślników do oddzielenia każdego słowa w procedurze składowanej (np. recent_albums ), podczas gdy inni będą używać wielkich liter (np. RecentAlbums ).

Dlatego możliwe jest, że nasza procedura składowana może mieć dowolną z poniższych nazw, w zależności od używanej konwencji nazewnictwa.

  • Ostatnie albumy
  • ostatnie_albumy
  • uspRecentAlbumy
  • usp_recent_albums
  • wybierz ostatnie albumy
  • select_RecentAlbums
  • select_recent_albums
  • pobierz najnowsze albumy
  • get_recent_albums

Dostajesz obraz. Ważna jest spójność. Wybierz jedną i trzymaj się jej. Ułatwi to korzystanie z procedury składowanej. Wyobraź sobie, że masz wyniki, a nawet setki procedur składowanych i za każdym razem, gdy chcesz wykonać jedną, musisz przejść do niej w Eksploratorze obiektów tylko dlatego, że nie pamiętasz, czy nazwałeś ją usp_RecentAlbums lub uspRecentAlbums .

Jak wspomniano, unikaj używania sp_ jako prefiks nazw procedur składowanych. SQL Server używa tego przedrostka dla systemowych procedur składowanych.

SQL Server najpierw przeszukuje systemowe procedury składowane, więc w najlepszym przypadku odnotujesz spadek wydajności. W najgorszym przypadku twoja procedura się nie uruchomi (jeśli ma tę samą nazwę co systemowa procedura składowana).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zapobiec automatycznemu zamykaniu programu SQL Server LocalDB?

  2. Jak działa funkcja LEFT() w programie SQL Server (T-SQL)

  3. Filtrowanie według opcji OFFSET-FETCH w zapytaniu Select — samouczek SQL Server / TSQL, część 118

  4. Co oznacza (nolock) w SQL Server?

  5. Jak używać FILEGROUPPROPERTY() w SQL Server