---
title: "Att bygga en flexibel SQL-fråga i en SP"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/69465-att-bygga-en-flexibel-sql-fråga-i-en-sp"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "ElMaco"
published: "2003-02-26T09:25:20.000Z"
updated: "2003-05-07T05:35:13.000Z"
replies: 1
views: 196
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/69465-att-bygga-en-flexibel-sql-fråga-i-en-sp"
---

# Att bygga en flexibel SQL-fråga i en SP

## #1 — ElMaco, 2003-02-26T09:25Z

Det började med att jag skulle skapa mig en lagrad procedur som kunde ta ett eller flera argument, beroende på hur tydlig användaren var i sin sökning.

```
create proc getFile @fileName varchar(50) = '%',
@fileExtension varchar(5) = '%',
@categoryID int = 0,
@sort varchar(25) = 'fileName',
@order varchar(25) = 'ASC'
as
If @categoryID <> 0
	Begin
		SELECT * FROM tblFile
		WHERE
		[fileName] LIKE '%' + @fileName + '%'
		AND
		fileExtension LIKE @fileExtension
		AND
		categoryID = @categoryID
		ORDER BY @sort + ' ' + @order
	End
Else If @categoryID = 0
	Begin
		SELECT * FROM tblFile
		WHERE
		[fileName] LIKE '%' + @fileName + '%'
		AND
		fileExtension LIKE @fileExtension
		ORDER BY @sort + ' ' + @order
	End
```

Sen kom jag på att jag ibland gör en referential join med categoryID - men inte alltid - beroende på om användaren anger ett kategori-ID. Om jag låter default vara 0 så kommer inte några poster att returneras.

If-satsen är en klumpig och inte särskilt skalbar lösning. Hur skulle man kunna lösa detta bättre?

Idealt hade jag velat konkatinera SQL-frågan med fler AND-satser beroende på hur många parametrar som jag får in (och som inte förses med defaultvärden).

Idéer? Någon?

/M.

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

## #2 — Brimba, 2003-05-07T05:35Z

```
create proc getFile @fileName varchar(50) = '%',
@fileExtension varchar(5) = '%',
@categoryID int = 0,
@sort varchar(25) = 'fileName',
@order varchar(25) = 'ASC'
as

SELECT * FROM tblFile
WHERE
[fileName] LIKE '%' + @fileName + '%'
AND
fileExtension LIKE @fileExtension
AND
categoryID = CASE @categoryID WHEN 0 THEN categoryID ELSE @categoryID END 
ORDER BY @sort + ' ' + @order
```

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/69465-att-bygga-en-flexibel-sql-fråga-i-en-sp
