webForumDet fria alternativet
Logga in / Bli medlem

Problem med lagrade procedurer

ASP

3 svar · 189 visningar · startad av ekke_t

Medlem sedan juli 2001203 inlägg
Trådstart#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

Medlem 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)
Medlem 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...

Medlem 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.

374 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
126 ms — deklarationer (db)
119 ms — hämta statistik (db)
125 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)