Как написать запрос SQL Server 2008 на основе параметра, переданного во время выполнения - PullRequest
0 голосов
/ 23 июня 2011

У меня есть 4 параметра, которые передаются в запрос. Мое требование - вернуть результат, даже если любой из них имеет значение null. Должны ли мы написать условие if в предложении where или написать динамический запрос? Параметр имеет datetime, являющийся одним из них, а также datetime, являющийся переменной диапазона.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 июня 2011

Если я вас правильно понимаю, вам нужно подготовить предложение where, которое также обрабатывает значение параметра NULL.

Итак, это может быть решением:

declare @myDate datetime = NULL;
declare @myRangeFrom datetime = NULL;
declare @myRangeUntil datetime = NULL;

SELECT * FROM MyTable
WHERE (@myDate IS NULL OR tblDate = @myDate)
AND (@myRangeFrom IS NULL OR tbl2ndDate >= @myRangeFrom)
AND (@myRangeUntil IS NULL OR tbl2ndDate <= @myRangeUntil)
0 голосов
/ 24 июня 2011

Я думаю, что вы запрашиваете «Необязательные параметры SQL»:

CREATE PROCEDURE TestProc
(
    @Param1 varchar(50) = NULL,
    @Param2 varchar(50) = NULL,
    @Param3 varchar(50) = NULL
)
AS
SELECT
    *
FROM
    TestTable

WHERE
    ((@Param1 IS NULL) OR (col1 = @Param1)) AND 
    ((@Param2 IS NULL) OR (col2 = @Param2)) AND 
    ((@Param3 IS NULL) OR (col3 = @Param3))

Однако есть проблема производительности с этим запросом;Как бы элегантно это ни выглядело, это помешает SQL Server правильно использовать ваши индексы.Если производительность является проблемой, лучше использовать sp_executesql для динамического создания строки и выполнения ее как запроса.

См .: http://www.davewentzel.com/content/optional-sql-parameters-and-performance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...