I have a stored procedure that fetches info from a table based on 4 parameters.
I want to get values based on the parameters, but if a parameter is NULL then that pa
Add Condition in where and using CASE .. WHEN .. THEN..
TRY TO FOLLOWING WAY.
select col1,col2,...colN..from Table
Where clm1 = CASE WHEN @PARAMETER = 0 THEN **COL1** ELSE **@PARAMETER**
ONCE YOU SET SAME COLUMN NAME INTO WHERE CONDITION THEN YOU RETRIEVE ALL DATA FROM TABLE ELSE IF YOU WANT TO PASS AS PARAMETER THEN RETRIEVE BASE ON CONDITION VALUES FROM TABLE.
How about something like
SELECT Id, col1, col2, col3, col4
FROM myTable
WHERE col1 LIKE @Param1+'%'
OR @Param1 IS NULL
in this specific case you could have also used
SELECT Id, col1, col2, col3, col4
FROM myTable
WHERE col1 LIKE ISNULL(@Param1,'')+'%'
But in general you can try something like
SELECT Id, col1, col2, col3, col4
FROM myTable
WHERE (condition1 OR @Param1 IS NULL)
AND (condition2 OR @Param2 IS NULL)
AND (condition3 OR @Param3 IS NULL)
...
AND (conditionN OR @ParamN IS NULL)
CREATE PROCEDURE myProcedure
@Param1 nvarchar(50) **= '',** //#1
@Param2 nvarchar(50) **= '',**
@Param3 nvarchar(50) **= '',**
@Param4 nvarchar(50) **= ''**
AS
BEGIN
**SET @Param1 = ISNULL(@Param1, '')** //#2
SELECT Id, col1, col2, col3, col4 FROM myTable WHERE col1 LIKE @Param1+'%'
END
CREATE PROCEDURE myProcedure
@Param1 nvarchar(50),
@Param2 nvarchar(50),
@Param3 nvarchar(50),
@Param4 nvarchar(50)
AS
BEGIN
IF(@Param1 IS NULL)
BEGIN
SELECT Id, col1, col2, col3, col4 FROM myTable
END
ELSE
BEGIN
SELECT Id, col1, col2, col3, col4 FROM myTable WHERE col1 LIKE @Param1+'%' OR @Param1 is Null
END
END
This should help
regards
Ashutosh Arya
This will work and easier to understand, at least for me.
The IIF
statement is only available in SQL Server 2012 and up, you can replace it with a case statement.
SELECT Id, col1, col2, ...
FROM myTable
WHERE condition1 = IIF(col1 IS NULL, col1, @Param1)
AND condition2 = IIF(col2 IS NULL, col2, @Param2)...
If you mean @param1 is parameter for col1, @param2 is parameter for col2,... etc You can try this:
CREATE PROCEDURE myProcedure
@Param1 nvarchar(50),
@Param2 nvarchar(50),
@Param3 nvarchar(50),
@Param4 nvarchar(50)
AS
BEGIN
declare @query nvarchar(4000)
SET @query='SELECT Id, col1, col2, col3, col4 FROM myTable '+
(case when ((@Param1 is null) and (@Param2 is null) and (@Param3 is null) and (@Param4 is null))
then ''
else
'where '+
(case when @Param1 is not null
then ' col1 like '''+@param1+'%'''+
(case when @param2 is not null then ' AND ' else '' end)
else '' end)+
(case when @Param2 is not null
then ' col2 like '''+@param2+'%'''+
(case when @param3 is not null then ' AND ' else '' end)
else '' end)+
(case when @Param3 is not null
then ' col3 like '''+@param3+'%'''+
(case when @param4 is not null then ' AND ' else '' end)
else '' end)+
(case when @Param4 is not null
then ' col4 like '''+@param4+'%'''
else '' end)
end)
exec sp_sqlexec @query