webForumDet fria alternativet
Logga in / Bli medlem

variabel stored procedure

Databaser & SQL

6 svar · 278 visningar · startad av clarkbones

Medlem sedan feb. 20013 023 inlägg
Trådstart#1

Hej!

Jag vill selecta ett fälts värde beroende på en parameter.

Jag har två parametrar:
@Measure
@CompanyName

Jag har några olika fält i tabellen. Vilket jag är intresserad av att selektera bestäms av parametern @Measure. Två fältnamn jag har är 'profit' och 'costs'.

såhär ser sqluttrycket ut:

SELECT @Measure FROM tbldata WHERE qCompanyName=@CompanyName

...men det blir inte rätt.

Medlem sedan dec. 200012 464 inlägg
#2

Jo, det blir rätt ;)

exec('SELECT ' + @Measure + ' FROM tbldata WHERE qCompanyName= ''' + @CompanyName + '''')
Medlem sedan juni 200032 967 inlägg
#3

Om man bygger upp frågan i sin lagrade procedur på detta sätt förlorar man dock de fördelar som förkompileringen av proceduren ger dig.

Mvh

Medlem sedan feb. 20013 023 inlägg
#4

@nders skrev:

Om man bygger upp frågan i sin lagrade procedur på detta sätt förlorar man dock de fördelar som förkompileringen av proceduren ger dig.

Mvh

Såg först nu ditt svar @nders. Menar du oavsett vilket sätt man gör eller menar du just LarsG:s sätt? Ska jag istället ha fler olika sp:s och anropa dem?

Medlem sedan juni 200032 967 inlägg
#5

Om man bygger upp frågan i sin stored procedure enligt LarsGs exempel så går man miste om förkompileringen, vilket ju är en av anledningarna till att använda en SP.

Du kan använda flera procedurer, eller styra frågandet med if-satser i proceduren.

mvh

Medlem sedan feb. 20013 023 inlägg
#6

Tack...ska testa med if

Medlem sedan feb. 20013 023 inlägg
#7

hmmm, kan man använda någon elseif eller måste man nästla if-satser om man har exempelvis fyra olika scenarier och inte bara två som i en vanlig if-else struktur?

edit: Eller kan jag använda case?

Fundering: Varför kunde inte Microsoft gjort så att man kunde programmera med VB istället för Transact-SQL? Så mycket enklare det hade varit. SQL i sig kunde förstås få vara kvar

260 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)