I have the following stored procedure with four parameters.
Stored procedure spTest
:
CREATE PROCEDURE spTest
@Name varchar(20) = \'\
I update the @Zohar answer. Define blank is bad habits, ideally define with null and later use blank. So the query will be
CREATE PROCEDURE spTest
@Name varchar(20) = null,
@Address varchar(100) = null,
@City varchar(50) = null,
@Pin varchar(50) = null
AS
SELECT *
FROM Test_Table
WHERE (Name = ISNULL(@Name,'') )
AND (Address = ISNULL(@Address,''))
AND (City = ISNULL(@City,''))
AND (Pin = ISNULL(@Pin,''));
GO
Even I like the @Biswa answer as it use current version of sql server, but Sqlserver 2008R2 does not have this function.
You can use ISNULL and NULLIF also in this case:
below code should work :
CREATE PROCEDURE spTest @Name varchar(20) = '', @Address varchar(100) = '', @City varchar(50) = '', @Pin varchar(50) = '' AS SET @Name=NULLIF(@Name,'') SET @Address=NULLIF(@Address,'') SET @City=NULLIF(@City,'') SET @Pin=NULLIF(@Pin,'') SELECT * FROM Test_Table WHERE Name = ISNULL(@Name,Name) AND Address = ISNULL(@Address,Address) AND City = ISNULL(@City,City) AND Pin = ISNULL(@Pin,Pin) GO
It's called catch-all queries and it basically goes like this:
CREATE PROCEDURE spTest
@Name varchar(20) = '',
@Address varchar(100) = '',
@City varchar(50) = '',
@Pin varchar(50) = ''
AS
SELECT *
FROM Test_Table
WHERE (@Name = '' OR Name = @Name)
AND (@Address = '' OR Address = @Address)
AND (@City = '' OR City = @City)
AND (@Pin = '' OR Pin = @Pin);
GO
You also might want to read this article about catch all queries