# Lagrade procedurer kontra Dynamic SQL - den gamla debatten ...Frans Bouma take...

<datetime class="hidden">2003-12-07T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported, Database, Performance -->
[Frans Bouma Ordförande](http://weblogs.asp.net/fbouma) verkligen inte ser poängen med att använda [Lagrade procedurer över att använda dynamiskt SQL](http://weblogs.asp.net/fbouma/posts/38178.aspx) - Frans, vad tror du om såna saker? [Indexerade vyer](http://www.sqlteam.com/item.asp?ItemID=1015)och användardefinierade funktioner - som i huvudsak är SPs men det finns ingen motsvarighet till Dynamic SQL, så du föreslår att jag inte ska använda dessa längre?
För att vara ärlig är jag alltid lite tveksam till att betala mycket förtroende för ett argument om en strategi för dataåtkomst från någon som har en [eget kapital](http://www.llblgen.com/) (Jag vet [LLBLGen Pro Ordförande](http://www.llblgen.com/) stöder SPs men det har en stark fördomar mot dynamiskt genererade T-SQL), ungefär som MS på Linuxdebatten ... lätt egenintresse (eller tidigare [Halliburton VD](http://www.fool.com/News/mft/2003/mft03032502.htm) om [Irak](http://www.thetip.org/art_Haliburton_Awarded_Massive_Iraqi_Oil_Reconstruction_Deal268_icle.html)- men det är en annan sak :-))
Jag använder SPs nästan uteslutande för dataåtkomst, Jag har inget egenintresse i en metod eller den andra, Jag brukade använda Dynamic SQL i de dåliga gamla dagarna av ASP/VBScript men bytte till SPs när jag behövde mer oomph i min dataåtkomstkod. Jag har en stark preferens för att manipulera data med hjälp av Set-baserad logik, ja, för mer komplexa operationer kommer jag att föra data i kod men i allmänhet, Jag använder DB för att manipulera och sedan returnera den minsta mängden data tillbaka till kod. Anledningen till att jag gör detta är inte envishet, helt enkelt jag tycker det är lättare att filtrera och sammanställa mina data närmast dess källa.
Jag finner också några av Frans argument lite saknas, det finns ett argument för att använda Dynamic SQL där du måste reagera på användarens inmatning för filtrering av data; rapporter är ett klassiskt exempel där du kanske vill hitta matchande data objekt baserat på ett variabelt antal ingångar - på alla sätt använda Dynamic SQL för det, men i 90% av fallen jag bara vill dra data från en DB så snabbt och smärtfritt som möjligt är det här där jag skulle använda SPs. Jag använder ofta [Tabellvariabler](http://www.eggheadcafe.com/articles/20010823.asp) för att sammanställa och filtrera data, behandla SPs som inställda leverantörer och ändra den slutliga utdata resultset för att bara innehålla de data jag faktiskt behöver - detta skulle vanligtvis kräva flera resor till och från DB (vi talar i dussintals här för varje fall) och skulle vara ganska långsam, samt orsaka tung nätverkstrafik som jag vanligtvis har ont råd på mycket skalbara webbplatser.
Kort sagt vad jag säger är att för mina syften, 90% Lagrade förfaranden, 10% Dynamiska SQL fungerar bäst - att göra absoluta uttalanden om sådana saker är som att kommentera religion, politik eller öppen källkod eller Java - Jag tror inte att det finns ett helt binärt argument att göra i något av dessa områden, det finns för många förankrade åsikter - hästar för kurser är min åsikt :-)