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
6 svar · 411 visningar · startad av Engine^
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?
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
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.
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
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
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.
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 ;)