Microsoft SQL Server предоставя механизма за съхранени процедури, за да опрости процеса на разработване на бази данни чрез групиране на Transact-SQL изявления в управляеми блокове. Запазените процедури се оценяват от повечето разработчици на SQL Server, които намират ефективността и сигурността, които извличат, и заслужават предварително инвестициите във времето.
Ползи от използването на съхранени процедури
Защо разработчикът трябва да използва съхранени процедури?
Ето основните ползи от тази технология:
- Предварително компилирано изпълнение: SQL Server компилира всяка съхранена процедура веднъж и след това отново използва плана за изпълнение. Това води до огромно увеличаване на производителността, когато се запомнят процедурите, които се съхраняват многократно.
- Намален трафик клиент / сървър: Ако честотната лента на мрежата е притеснена във вашата среда, ще се радвате да научите, че съхранените процедури могат да намалят дългите SQL заявки до един ред, който се предава по жицата.
- Ефективно повторно използване на код и програмиране: Запазените процедури могат да се използват от множество потребители и клиентски програми. Ако ги използвате по планиран начин, ще откриете, че цикълът на разработка отнема по-малко време.
- Подобрени контроли за сигурност: Можете да разрешите на потребителите да изпълняват запазена процедура независимо от базовите разрешения за таблици.
Съхраняваните процедури са подобни на функциите, дефинирани от потребителя, но има фини разлики.
структура
Съхранените процедури са подобни на конструкциите, които се виждат на други езици за програмиране.
Те приемат данни под формата на входни параметри, които са посочени при изпълнението. Тези входни параметри (ако са приложени) се използват при изпълнението на поредица от изрази, които дават резултат. Този резултат се връща на повикващата среда чрез използване на набор от записи, параметри на изхода и код за връщане.
Това може да звучи като хапче, но ще откриете, че съхранените процедури всъщност са доста прости.
пример
Нека да разгледаме практически пример, свързан с таблицата, озаглавена "Инвентаризация", показана в долната част на тази страница. Тази информация се актуализира в реално време и мениджърите на складовете непрекъснато проверяват нивата на продуктите, съхранявани в техния склад и налични за доставка. В миналото всеки мениджър би направил заявки, подобни на следното:
SELECT продукт, количествоОт инвентаризацияWHERE Склад = 'FL'
Това доведе до неефективна работа на SQL Server. Всеки път, когато мениджърът на склада изпълни заявката, сървърът на базата данни бе принуден да прекомпилира заявката и да я изпълни от нулата. Освен това е необходимо мениджърът на складовете да има познания за SQL и съответните разрешения за достъп до информацията за таблицата.Вместо това процесът може да бъде опростен чрез използването на запомнена процедура. Ето кода на процедура наречена sp_GetInventory, която извлича нивата на рекламните места за даден склад. След това мениджърът на складовете във Флорида може да осъществи достъп до нивата на инвентара, като издава команда: Складовият мениджър в Ню Йорк може да използва същата съхранена процедура за достъп до инвентара на тази област: Даде се, това е един прост пример, но ползите от абстракцията могат да се видят тук. Мениджърът на складовете не трябва да разбира SQL или вътрешната работа на процедурата. От гледна точка на представянето, запомнената процедура прави чудеса. SQL Server създава план за изпълнение веднъж и след това го използва повторно, като включи съответните параметри в момента на изпълнение.Сега, след като научихте предимствата на съхранените процедури, излезте и ги използвайте. Опитайте няколко примера и измерете постигнатото подобрение на ефективността - ще бъдете изумени! Таблица за инвентаризациитеПРОЦЕДУРА НА СЪЗДАВАНЕ sp_GetInventory@location varchar (10)КАТОSELECT продукт, количествоОт инвентаризацияWHERE Склад = @ местоположение
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
документ за самоличност продукт Склад количество 142 Зелен боб Ню Йорк 100 214 грах FL 200 825 царевица Ню Йорк 140 512 Лима фасул Ню Йорк 180 491 домати FL 80 379 диня FL 85