August 21, 2014 at 5:14 am
Hi SQL Folk,
I wanted to get some feedback on how I am using a CASE statement within a WHERE clause to filter data:
CREATE PROCEDURE dbo.GetSomeStuff
@filter1 varchar(100) = '',
@filter2 varchar(100) = ''
AS
BEGIN
SELECT
col1,
col2,
col3,
COUNT(*) as [result]
FROM
table1 t1
WHERE
CASE WHEN @filter1 != '' THEN t1.Col1 ELSE @filter1 = @filter1 AND
CASE WHEN @filter1 != '' THEN t1.Col2 ELSE @filter2 = @filter2
GROUP BY
col1, col2, col3
END
What I want, is to be able to pass in a single value to filter the table, or if I pass in (at the moment a blank) for no filter to be applied to the table.
Is this a good way to accomplish that, or is there a better way? Also, down the line I'm probably going to want to have multiple filter items for a single filter, what would be the best way to implement that?
Thanks,
Ken
August 22, 2014 at 10:31 am
Sean Lange had this to say while the forum didn't allow him to reply:
...you should check out this article. http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/
There are some serious performance issues for this type of query if you don't handle it correctly and Gail does an excellent job explaining how to deal with this.
-----
Thanks Sean, I'll check it out.
August 22, 2014 at 12:44 pm
CELKO (8/22/2014)
Did you know that SQL uses “<>” and not “!=” ?
T-SQL does allow the use of != as well as <> so I don't think it's a big deal that on a forum dedicated to MS SQL Server a poster uses T-SQL syntax.
Jack Corbett
Consultant - Straight Path Solutions
Check out these links on how to get faster and more accurate answers:
Forum Etiquette: How to post data/code on a forum to get the best help
Need an Answer? Actually, No ... You Need a Question
August 22, 2014 at 2:12 pm
That's like saying you shouldn't write "colour" and should write "color" just because someone said so.
August 27, 2014 at 12:36 pm
Luis Cazares (8/22/2014)
That's like saying you shouldn't write "colour" and should write "color" just because someone said so.
Got any left handed spoons?
September 2, 2014 at 4:13 am
kzhen (8/22/2014)
Sean Lange had this to say while the forum didn't allow him to reply:...you should check out this article. http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/
There are some serious performance issues for this type of query if you don't handle it correctly and Gail does an excellent job explaining how to deal with this.
-----
Thanks Sean, I'll check it out.
For an in-depth example along those lines:
How to Design, Build and Test a Dynamic Search Stored Procedure [/url]
My thought question: Have you ever been told that your query runs too fast?
My advice:
INDEXing a poor-performing query is like putting sugar on cat food. Yeah, it probably tastes better but are you sure you want to eat it?
The path of least resistance can be a slippery slope. Take care that fixing your fixes of fixes doesn't snowball and end up costing you more than fixing the root cause would have in the first place.
Need to UNPIVOT? Why not CROSS APPLY VALUES instead?[/url]
Since random numbers are too important to be left to chance, let's generate some![/url]
Learn to understand recursive CTEs by example.[/url]
[url url=http://www.sqlservercentral.com/articles/St
Viewing 6 posts - 1 through 5 (of 5 total)
You must be logged in to reply to this topic. Login to reply