Engine^Medlem sedan dec. 20002 861 inlägg
Jag håller på och laborerar med lite dynamisk sql och har givetvis kört fast :)
Jag vill göra följande
DECLARE @strSql nvarchar(1000)
DECLARE @paramlist nvarchar(1000)
SET @strSql =
N'SELECT stuff
FROM table
WHERE country = @country AND round = @round
CASE LEN(@alternativeSql) > 0
THEN '' AND @alternativeSql''
END
GROUP BY title_id'
SET @paramlist = N'@country int, @round int, @alternativeSql varchar(50)'
EXEC sp_executesql @strSql, @paramlist, @round=2, @country=1, @alternativeSql=''
Kan man använda CASE i WHERE eller behöver jag någon yttre SQL för detta?
@ndersMedlem sedan juni 200026 914 inlägg
Du kan använda CASE i WHERE.
ORDER BY
CASE [b]WHEN[/b] foo=bar THEN
...
ELSE
...
END
Jag förstår dock inte helt vad du försöker göra i WHERE-satsen i din dynamiska SQL-fråga. (Glöm inte heller att escapea apostrofer inne i @strSQL).
mvh
Engine^Medlem sedan dec. 20002 861 inlägg
Hmm... varför har du då inlett med ORDER BY?
Jo, det är så att @alternativeSql kan innehålla en, två eller många ytterligare kriterier.
@ndersMedlem sedan juni 200026 914 inlägg
Hmm...
Nu när jag tänker efter så tror jag att jag tänkt helt fel.
men du kan ju kanske göra något sånt härnt:
SET @strSql =
N'SELECT stuff
FROM table
WHERE country = @country AND round = @round'
if @alternativeSql <> '' begin
set @strSQL = @strSQL + @alternativeSQL
end
set @strSQL = @strSQL + ' GROUP BY title_id'
Mvh
Engine^Medlem sedan dec. 20002 861 inlägg
Det fungerar ju till en viss gräns. Problemet är att då tappar jag, så att säga, bort @alternativeSql ur själva @strSql. Då kan jag inte längre använda mig utav
SET @paramlist = N'@country int, @round int, @alternativeSql varchar(50)'
EXEC sp_executesql @strSql, @paramlist, @round=2, @country=1, @alternativeSql=''
om jag förstått det hela rätt.
Möjligen går jag en omväg nu :OO
LarsGMedlem sedan dec. 200012 465 inlägg
Möjligen går jag en omväg nu
Återvändsgränd skulle jag säga. En parameter kan bara innehålla ett värde, inte predikat och dylikt, när den används i sp_executesql. Skriv så som @nders skriver.
Engine^Medlem sedan dec. 20002 861 inlägg
Cul-de-sac... suck.
Jag fortsatte på @nders föreslagna spår, men det han bli helg. Nu är det måndag igen, så dags för nya friska tag ;)