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??
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)