- For individual users
- Instant access to solutions
- Ask your tech questions
- Start your 30-day Free Trial
Main Topics
Browse All TopicsAs system analysis I am reviewing some stored procedures. In one case I asked the developer to create a selectmatching stored procedure that would get as parameters all fields on the table. If a value was received for a specific parameter, the procedure had to filter on that value. If a NULL was received for a specific parameter, the procedure should not filter on it. The developer came up with this:
CREATE PROCEDURE dbo.ErrorMessageSelectMatc
@ErrorMessageID integer,
@ErrorMessageDesc varchar(1024),
@FailureActionID integer,
@ErrorSeverityID integer,
@ReturnValue integer output)
AS
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET NOCOUNT ON
DECLARE @SQL varchar(2000)
SET @SQL =
'
SELECT
ErrorMessageID,
ErrorMessageDesc,
FailureActionID,
ErrorSeverityID
FROM
ErrorMessage
WHERE
1 = 1 '
+
CASE WHEN @ErrorMessageID IS NULL THEN ''
ELSE ' AND ErrorMessageID = ' + CAST(@ErrorMessageID AS varchar(10)) END
+
CASE WHEN @ErrorMessageDesc IS NULL THEN ''
WHEN @ErrorMessageDesc = '' THEN ''
ELSE ' AND ErrorMessageDesc = ''' + @ErrorMessageDesc END + ''''
+
CASE WHEN @FailureActionID IS NULL THEN ''
ELSE ' AND FailureActionID = ' + CAST(@FailureActionID AS varchar(10)) END
+
CASE WHEN @ErrorSeverityID IS NULL THEN ''
ELSE ' AND ErrorSeverityID = ' + CAST(@ErrorSeverityID AS varchar(10)) END
EXECUTE (@SQL)
SET @ReturnValue = @@ERROR
While the above should do the trick, there should be a better way of doing it. Is there?
This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.
Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.
If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.
Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.
Access the answers to your technology questions today.
30-day free trial. Register in 60 seconds.
Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Try it out and discover for yourself.
30-day free trial. Register in 60 seconds.
Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.
Business Accounts
Answer for Membership
by: LowfatspreadPosted on 2004-07-09 at 00:27:36ID: 11509526
i would assume that a straight singleton
sql statement would suffice... I can't believe that you'd index the columns
indivually (or have any need to do so!)
if you must go with the dynamic sql variant then at least get rid of the 1 = 1 at the
start of the where clause...
SELECT
ErrorMessageID,
ErrorMessageDesc,
FailureActionID,
ErrorSeverityID
FROM
ErrorMessage
WHERE
( @ErrorMessageID IS NULL or ErrorMessageID =@ErrorMessageID)
and (@ErrorMessageDesc IS NULL or ErrorMessageDesc = @ErrorMessageDesc )
and (@FailureActionID IS NULL or FailureActionID = @FailureActionID )
and ( @ErrorSeverityID IS NULL or ErrorSeverityID = @ErrorSeverityID)