Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2016:Създайте съхранена процедура

Съхранената процедура е група от SQL изрази, компилирани в един. Съхранените процедури могат да включват бизнес логика и други програмни конструкции.

В SQL Server съхранената процедура е група от един или повече Transact-SQL изрази или препратка към метод за общ език за изпълнение на Microsoft .NET Framework (CLR).

Програмируемост

Но съхранената процедура е нещо повече от дълъг скрипт. Това е скрипт, който е записан в SQL Server специално под Съхранените процедури възел и може:

  • Приемане на входни параметри (и връщане на множество стойности под формата на изходни параметри към извикващата програма).
  • Съдържа изрази за програмиране.
  • Върнете стойност на състоянието на извикващата програма, за да посочите успех или неуспех, както и причината за всеки неуспех.

Съхранените процедури често съдържат бизнес логика. Например, съхранената процедура може да приеме параметри, които са й предадени, и да тества спрямо тези параметри с помощта на IF изявления. Например, ако параметърът е една стойност, направете това, ако е друга стойност, направете това.

Съхранените процедури могат да подобрят производителността в приложение, тъй като съхранената процедура се анализира и оптимизира веднага след създаването й и след това се съхранява в паметта. Изпълнението на условна заявка чрез съхранена процедура може да бъде изключително бързо - в сравнение с приложение, което изпраща заявка в мрежата, до SQL Server, след което всички данни се връщат към него в мрежата, за да може да филтрира през нея и да избира само записите, от които се интересува.

Предимства на съхранените процедури

Ето някои от основните предимства при използването на съхранени процедури:

Полза Обяснение
Модулно програмиране Можете да напишете съхранена процедура веднъж, след което да я извикате отново и отново, от различни части на приложение (и дори от множество приложения).
Ефективност Съхранените процедури осигуряват по-бързо изпълнение на кода и намаляват мрежовия трафик.
  • По-бързо изпълнение:Съхранените процедури се анализират и оптимизират веднага след като бъдат създадени и съхранената процедура се съхранява в паметта. Това означава, че ще се изпълни много по-бързо от изпращането на много редове SQL код от вашето приложение към SQL Server. Това изисква SQL Server да компилира и оптимизира вашия SQL код всеки път, когато се изпълнява.
  • Намален мрежов трафик:Ако изпратите много редове SQL код по мрежата до вашия SQL Server, това ще повлияе на производителността на мрежата. Това е особено вярно, ако имате стотици редове SQL код и/или имате много активност във вашето приложение. Изпълнението на кода на SQL Server (като съхранена процедура) елиминира необходимостта от изпращане на този код по мрежата. Единственият мрежов трафик ще бъдат предоставените параметри и резултатите от всяка заявка.
Сигурност Потребителите могат да изпълняват съхранена процедура, без да е необходимо директно да изпълняват който и да е от операторите. Следователно съхранената процедура може да осигури разширена функционалност на базата данни за потребители, които обикновено не биха имали достъп до тези задачи, но тази функционалност се предоставя по строго контролиран начин.

Как да създадете съхранена процедура

За да създадете съхранена процедура, използвайте CREATE PROCEDURE оператор, последван от кода, който съставя съхранената процедура. Ако вашата съхранена процедура ще приема параметри, те трябва да бъдат включени след името.

CREATE PROCEDURE myStoredProcedure AS
...

OR

CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS
...

Сега ще създадем съхранена процедура въз основа на един от изгледите, които създадохме по-рано — RecentAlbums изглед.

Този изглед връща всички албуми, издадени през последните 20 години. Това е добре, стига да има нужда да погледнем само 20 години назад. Но какво ще стане, ако искате потребителят да избере колко години да покрива?

Съхранената процедура може да реши този проблем.

Ще създадем съхранена процедура, която приема параметър. Стойността на параметъра ще бъде броят на годините за търсене назад. Следователно тази стойност може да бъде посочена от потребителя, когато изпълнява съхранената процедура.

  1. Проектирайте съхранената процедура

    Отворете нов прозорец за заявка и добавете кода за съхранената процедура.

    В нашия случай ще копираме/поставим кода от RecentArtists прегледайте и променете горната част, така че да стане съхранена процедура.

    Ще добавим параметър, наречен @Count това ще определи колко години трябва да погледне съхранената процедура.

    Така че ще заменим твърдо кодираната стойност на 20 с @Count

    Примерен код

    Ето кода от нашия пример:

    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. Създайте съхранената процедура

    След като всичко изглежда добре, можете да изпълните оператора, за да създадете съхранената процедура.

    Щракнете върху Изпълни за да създадете съхранената процедура.

    След като съхранената процедура е създадена, можете да я видите в Object Explorer (може да се наложи да опресните Съхранените процедури възел първи).

  3. Изпълнете съхранената процедура

    След като вече е създадена, можете да изпълните съхранената процедура.

    Отворете нов прозорец за заявка, добавете това:

    EXEC spRecentAlbums @Count = 5;

    Сега щракнете върху Изпълни от лентата с инструменти.

    Съхранената процедура ще върне всички албуми, издадени през последните 5 години.

  4. Опитайте различни параметри

    Опитайте да промените стойността на параметъра, за да видите как това се отразява на резултатите.

    Можете също така да изпълнявате няколко оператора един след друг. За всяко изявление ще се появи нов панел с резултати.

Шаблон за съхранена процедура

В SQL Server 2016 можете да създадете съхранена процедура, като щракнете с десния бутон върху Съхранените процедури възел в Object Explorer и изберете Ново> Съхранена процедура... или Ново> Естествено компилирана съхранена процедура... .

Това ще отвори шаблон, който е готов за попълване с вашата специфична процедура.

Изпълнете съхранена процедура чрез GUI

Можете също да използвате графичния потребителски интерфейс, за да изпълните съхранена процедура.

  1. Стартирайте Процедура за изпълнение Диалогов прозорец

    В Object Explorer щракнете с десния бутон върху съхранената процедура и изберете Изпълни съхранена процедура... .

  2. Параметри на доставката

    Въведете стойност за всички параметри, които съхранената процедура изисква, след което щракнете върху OK .

  3. Резултатите

    Резултатите се показват.

Промяна на съхранена процедура

Ако трябва да промените съществуваща съхранена процедура, просто заменете CREATE с ALTER (заедно с актуализираната процедура).

Този пример модифицира съхранената процедура, така че резултатите да се сортират по дата на издаване в низходящ ред:

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;

Системни съхранени процедури

SQL Server включва голям брой системни съхранени процедури за подпомагане на административните задачи на база данни. Много от задачите, които можете да изпълнявате чрез GUI, могат да бъдат извършени чрез системна съхранена процедура. Например, някои от нещата, които можете да правите със системните съхранени процедури, включват:

  • Конфигуриране на акаунти за сигурност
  • Настройте свързани сървъри
  • Създайте план за поддръжка на база данни
  • Създайте каталози за пълнотекстово търсене
  • Добавяне на дистанционно влизане
  • Конфигуриране на репликация
  • Настройте насрочени задачи
  • и много повече...

Системните съхранени процедури имат префикс с sp_ , така че е най-добре да избягвате използването на този префикс за вашите собствени процедури.

Конвенции за именуване

Добра идея е да разработите последователна конвенция за именуване за вашите съхранени процедури (и за всички други обекти във вашата база данни).

Някои хора поставят префикс на своите съхранени процедури с usp_ (за указване на дефинирана от потребителя съхранена процедура), други я започват с ключова дума SQL, като select , вмъкване , актуализация , изтриване . Други използват съкращение за приложението.

Някои използват долни черти, за да разделят всяка дума в съхранената процедура (напр. recent_albums ), докато други ще използват главни и главни букви (напр. RecentAlbums ).

Следователно е възможно нашата съхранена процедура да бъде наречена някое от следните имена, в зависимост от използваната конвенция за именуване.

  • Последни албуми
  • скорошни_албуми
  • uspRecentAlbums
  • usp_recent_albums
  • изберете RecentAlbums
  • select_RecentAlbums
  • select_recent_albums
  • getRecentAlbums
  • get_recent_albums

Разбрахте картината. Важното е последователността. Изберете един и се придържайте към него. Това ще улесни, когато трябва да използвате съхранена процедура. Представете си, че имате резултати или дори стотици съхранени процедури и всеки път, когато отидете да изпълните една, трябва да отидете до нея в Object Explorer само защото не можете да си спомните дали сте го нарекли usp_RecentAlbums или uspRecentAlbums .

Както споменахме, избягвайте използването на sp_ като префикс за имената на вашите съхранени процедури. SQL Server използва този префикс за системните съхранени процедури.

SQL Server първо търси в системните съхранени процедури, така че в най-добрия случай ще постигнете удар в производителността. В най-лошия случай вашата процедура няма да се изпълни (ако споделя име със системна съхранена процедура).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ATAN() Примери в SQL Server

  2. Какво се случва с незавършена транзакция, когато връзката е затворена?

  3. Как да настроите поща на база данни в SQL Server (SSMS)

  4. ПОРЪЧАЙТЕ ПО ДАТА, като първо се показват NULL, след това най-новите дати

  5. Лесен начин за транспониране на колони и редове в SQL?