---
title: "Dynamisk SQL och CASE i WHERE-delen"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/126902-dynamisk-sql-och-case-i-where-delen"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Engine^"
published: "2005-04-22T13:25:13.000Z"
updated: "2005-04-25T06:58:25.000Z"
replies: 6
views: 436
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/126902-dynamisk-sql-och-case-i-where-delen"
---

# Dynamisk SQL och CASE i WHERE-delen

## #1 — Engine^, 2005-04-22T13:25Z

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?

Permalänk: https://www.webforum.nu/p/126902

## #2 — @nders, 2005-04-22T13:27Z

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

Permalänk: https://www.webforum.nu/p/1598345

## #3 — Engine^, 2005-04-22T13:29Z

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.

Permalänk: https://www.webforum.nu/p/1598347

## #4 — @nders, 2005-04-22T13:32Z

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

Permalänk: https://www.webforum.nu/p/1598349

## #5 — Engine^, 2005-04-22T13:45Z

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

Permalänk: https://www.webforum.nu/p/1598356

## #6 — LarsG, 2005-04-24T14:03Z

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

Permalänk: https://www.webforum.nu/p/1599083

## #7 — Engine^, 2005-04-25T06:58Z

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

Permalänk: https://www.webforum.nu/p/1599309

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/126902-dynamisk-sql-och-case-i-where-delen
