开发者

Can we pass null to sql parameter to query all?

开发者 https://www.devze.com 2022-12-20 05:48 出处:网络
I have a query as follows select * from table 开发者_运维技巧where col1 = @param1 and col2 = @parm2

I have a query as follows

select * from table 开发者_运维技巧where col1 = @param1 and col2 = @parm2

And another

select * from table where col1 = @param1

Is it possible do both operations in same query based on parameter passed, if it is null query all or when parameter has value select them.

My queries are very big and i have to create 2 versions of sp's for each and i was thinking that can i try to avoid creating two.


SELECT * from table where col1 = @param1 and col2 = isnull(@parm2, col2)

ought to do what you're looking for.


Well, you can try this, but I don't think it will be very performant:

SELECT * FROM tab WHERE col1 = @param1 AND col2 = ISNULL(@parm2, col2)


You could try something like:

    select * from table where coalesce(@param1, col1) = col1 
and coalesce(@param2, col2) = col2


All the suggestions here about using COALESCE or ISNULL will work - effectively doing this:

select *
from table
where (@param1 IS NULL OR col1 = @param1)
    and (@parm2 IS NULL OR col2 = @parm2)

But you may need to watch out for parameter sniffing. SQL Server 2005 does not have the OPTIMIZE FOR UNKNOWN - you can mask the parameters into local variables in the SP to help avoid that or use RECOMPILE option.


How about this:

select *
  from table
  where where (col1 = @param1 and col2 = @parm2)
  or (col1 = @param1 and parm2 is null)


If you use Stored procedures!

IF Boolean_expression 
     { sql_statement | statement_block } 
[ ELSE 
     { sql_statement | statement_block } ] 

In your scenario. something like

if (@param1 = null)
Begin
 select * from table where col2 = @parm2
( 
End

else if (@param1 = 'something' )
Begin
(
 select * from table where col1 = @param1
End

reference : http://msdn.microsoft.com/en-us/library/ms182717.aspx

0

精彩评论

暂无评论...
验证码 换一张
取 消