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.