Microsoft SQL Server tillhandahåller den lagrade procedurmekanismen för att förenkla databasutvecklingsprocessen genom att gruppera Transact-SQL-satser i hanterbara block. Lagrade procedurer uppskattas av de flesta SQL Server-utvecklare som finner effektivitets- och säkerhetsfördelarna som de skördar är väl värda den inledande investeringen i tid.
Fördelar med att använda lagrade procedurer
Varför ska en utvecklare använda lagrade procedurer?
Här är de viktigaste fördelarna med denna teknik:
- Förkompilerat utförande: SQL Server sammanställer varje lagrad procedur en gång och återanvänder exekveringsplanen. Detta resulterar i en enorm prestationsökning när lagrade procedurer kallas upprepade gånger.
- Minskad klient / server trafik: Om nätverksbandbredd är en oro i din miljö kommer du gärna att veta att lagrade procedurer kan minska långa SQL-frågor till en enda rad som överförs via ledningen.
- Effektiv återanvändning av kod och programmeringsabstraktion: Lagrade procedurer kan användas av flera användare och klientprogram. Om du använder dem på ett planerat sätt, hittar du att utvecklingscykeln tar mindre tid.
- Förbättrad säkerhetskontroll: Du kan ge användarna tillstånd att genomföra en lagrad procedur oberoende av underliggande tabellbehörigheter.
Lagrade procedurer liknar användardefinierade funktioner, men det finns subtila skillnader.
Strukturera
Lagrade procedurer liknar de konstruktioner som ses på andra programmeringsspråk.
De accepterar data i form av inmatningsparametrar som anges vid körningstid. Dessa ingångsparametrar (om de implementeras) används vid utförandet av en serie uttalanden som ger ett visst resultat. Detta resultat returneras till uppringande miljö genom användning av en recordset, utgångsparametrar och en returkod.
Det kan låta som en munnfull, men du kommer att upptäcka att lagrade procedurer faktiskt är ganska enkla.
Exempel
Låt oss ta en titt på ett praktiskt exempel relaterat till tabellen med namngivna inventeringar som visas längst ned på den här sidan. Denna information uppdateras i realtid, och lagerchefer kontrollerar ständigt de nivåer av produkter som lagras i deras lager och är tillgängliga för leverans. Tidigare kunde varje chef köra frågor som liknar följande:
VÄLJ produkt, kvantitetFRÅN InventoryVAR Varuhus = 'FL'
Detta resulterade i ineffektiv prestanda på SQL Server. Varje gång en lagerhanterare utförde frågan, blev databasservern tvungen att omkompilera frågan och genomföra den från början. Det krävde också att lagerhanteraren skulle ha kunskap om SQL och lämpliga behörigheter för att komma åt tabellinformationen.Istället kan processen förenklas genom användning av en lagrad procedur. Här är koden för ett förfarande som heter sp_GetInventory som hämtar lagernivåerna för ett givet lager. Floridagasinschefen kan sedan få tillgång till lagernivåer genom att utfärda kommandot: New York Warehouse Manager kan använda samma lagrade procedur för att få tillgång till områdets inventering: Beviljas, det här är ett enkelt exempel, men fördelarna med abstraktion kan ses här. Lagerhanteraren behöver inte förstå SQL eller processens inre arbete. Ur ett prestationsperspektiv fungerar det lagrade förfarandet underverk. SQL Server skapar en exekveringsplan en gång och återutnyttjar den genom att plugga in lämpliga parametrar vid körningstid.Nu när du har lärt dig fördelarna med lagrade procedurer, kom dit och använd dem. Prova några exempel och mäta prestandaförbättringar som uppnåtts - du kommer bli förvånad! Inventory TableSKAPA PROCEDURE sp_GetInventory@location varchar (10)SOMVÄLJ produkt, kvantitetFRÅN InventoryVAR Varuhus = @location
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
ID Produkt lager Kvantitet 142 Gröna bönor NY 100 214 ärtor FL 200 825 Majs NY 140 512 limabönor NY 180 491 tomater FL 80 379 Vattenmelon FL 85