Skip to main content

Skapa lagrade procedurer för din SQL Server

Stored procedures in sql server Part 18 (April 2025)

Stored procedures in sql server Part 18 (April 2025)
Anonim

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.

SKAPA PROCEDURE sp_GetInventory@location varchar (10)SOMVÄLJ produkt, kvantitetFRÅN InventoryVAR Varuhus = @location

Floridagasinschefen kan sedan få tillgång till lagernivåer genom att utfärda kommandot:

EXECUTE sp_GetInventory 'FL'

New York Warehouse Manager kan använda samma lagrade procedur för att få tillgång till områdets inventering:

EXECUTE sp_GetInventory 'NY'

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 Table

IDProduktlagerKvantitet
142Gröna bönorNY100
214ärtorFL200
825MajsNY140
512limabönorNY180
491tomaterFL80
379VattenmelonFL85