Можем ли мы передать значение null в параметр sql для запроса всех? - PullRequest
1 голос
/ 17 февраля 2010

У меня есть запрос следующим образом

select * from table where col1 = @param1 and col2 = @parm2

и еще

select * from table where col1 = @param1

Возможно ли выполнить обе операции в одном и том же запросе на основе переданного параметра, если они являются пустым запросом или если параметр имеет значение, выберите их.

Мои запросы очень большие, и мне нужно создать 2 версии sp для каждой, и я подумал, можно ли попытаться избежать создания двух.

Ответы [ 6 ]

2 голосов
/ 17 февраля 2010
SELECT * from table where col1 = @param1 and col2 = isnull(@parm2, col2)

должен делать то, что вы ищете.

1 голос
/ 17 февраля 2010

Все предложения здесь об использовании COALESCE или ISNULL будут работать - эффективно делать это:

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

Но вам, возможно, придется остерегаться прослушивания параметров. SQL Server 2005 не имеет OPTIMIZE FOR UNKNOWN - вы можете маскировать параметры в локальные переменные в SP, чтобы избежать этого, или использовать опцию RECOMPILE.

1 голос
/ 17 февраля 2010

Вы можете попробовать что-то вроде:

    select * from table where coalesce(@param1, col1) = col1 
and coalesce(@param2, col2) = col2
1 голос
/ 17 февраля 2010

Ну, вы можете попробовать это, но я не думаю, что это будет очень эффективно:

SELECT * FROM tab WHERE col1 = @param1 AND col2 = ISNULL(@parm2, col2)
0 голосов
/ 17 февраля 2010

Если вы используете хранимые процедуры!

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

По вашему сценарию. что-то вроде

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

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

ссылка: http://msdn.microsoft.com/en-us/library/ms182717.aspx

0 голосов
/ 17 февраля 2010

Как насчет этого:

select *
  from table
  where where (col1 = @param1 and col2 = @parm2)
  or (col1 = @param1 and parm2 is null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...