webForumDet fria alternativet

Problem med lagrade procedurer

3 svar · 187 visningar · startad av ekke_t

ekke_tMedlem sedan juli 2001203 inlägg
#1

Hej hej!

Jag är nybörjare på detta och har nu fått lite problem med lagrade procedurer... :(

Jag har gjort en sökfunktion som söker på ett antal fält i en databas... man matar in sökvärdena i ett vanligt formulär med några drop-down menyer och checkboxar etc... totalt 11 fält...

Jag har nu använt mig av "wild SQL" för att utföra sökningen.. men för att snabba upp det hela lite vill jag lägga in sökningen i en lagrad procedur...

Problemet är att jag inte vet hur jag ska kunna göra en dynamisk SQL-fråga där... jag vill alltså inte söka på fält där man inte angett något värde...
Jag skulle ju kunna lösa det med en mängd if-satser i proceduren.. men det känns ju lite jobbigt :(

Någon som har något tips på hur jag kan lösa detta?? :)

/Erik

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Du kan dynamiskt bygga ihop en sträng i din procedur och exekvera den. Om du gör så, så kommer du dock inte att få någon prestandavinst i och med att den frågan måste kompileras vid varje anrop av proceduren.


create procedure p(@s1 varchar(20) = null,@s2 varchar(30) = null)

as
  declare @sqlStr varchar(2000)
  set @sqlStr = null
  
  if  @s1 is not null 
      if @sqlStr is null
         set @sqlStr = ' where aleb = ''' + @s1 + '' '
      else
         set @sqlStr = ' and aleb = ''' + @s1 + '' '

if  @s2 is not null 
      if @sqlStr is null
         set @sqlStr = ' where caleb = ''' + @s2 + '' '
      else
         set @sqlStr = ' and caleb = ''' + @s2 + '' '

    exec('select * from ogrish ' + @sqlStr)

------------------
essentitia preter non sans multiplicandum

ekke_tMedlem sedan juli 2001203 inlägg
#3

Tack så mycket :D

Då kan jag ju lika gärna strunta i att använda lagrad procedur i det här fallet...

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Ja, ur prestandasynpunkt. Däremot så blir din VBScript-kod enklare om du använder en lagrad procedur.

------------------
essentitia preter non sans multiplicandum

125 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)