Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
foosh Member Откуда: Сообщений: 188 |
Корифеи, помогите советом, плиз. Есть хранимая процедура с тремя параметрами, в которой должен выполняться запрос такого типа: SELECT * FROM з_Расчеты_сумма WHERE Дата BETWEEN (@Начальная_дата) AND (@Конечная_дата) AND Клиент = @Клиент Проблема в чем. Передаваемые параметры в определенных случаях могут иметь значение NULL. Если значение NULL имеет параметр @Клиент, тогда, естественно, он не должен участвовать в формировании выборки. Если определена только одна из дат, тогда выборка производится в период между этой датой и настоящим моментом. Если не определены обе даты, тогда выборка по дате вообще не производится. Как лучше это реализовать? Через IF ELSE? Или есть другие способы? |
2 мар 13, 18:10 [14003451] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
ISNULL |
2 мар 13, 18:14 [14003457] Ответить | Цитировать Сообщить модератору |
foosh Member Откуда: Сообщений: 188 |
Cygapb-007, Прошу сказать немного больше, потому что я, по всей видимости, недопонял. В моем понимании, если просто использовать ISNULL, то запрос тогда не вернет никаких значений. А мне нужно с точностью до наоборот - если параметр неопределен, чтобы запрос возвращал все значения. То есть, если клиент неопределен, чтобы запрос возвращал записи для всех клиентов. Если даты неопределены - чтобы возвращались записи за все время существования базы. |
2 мар 13, 18:37 [14003489] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
SELECT * FROM з_Расчеты_сумма WHERE Дата BETWEEN ISNULL(@Начальная_дата,0) AND ISNULL(@Конечная_дата,GETDATE()) AND Клиент = ISNULL(@Клиент,Клиент) |
2 мар 13, 18:53 [14003529] Ответить | Цитировать Сообщить модератору |
serpentariy Member Откуда: Сообщений: 265 |
SELECT * FROM з_Расчеты_сумма WHERE (Дата BETWEEN (@Начальная_дата) AND (@Конечная_дата) OR Дата>=@Начальная_дата AND @Конечная_дата IS NULL OR @Начальная_дата IS NULL AND @Конечная_дата IS NULL) AND (Клиент = @Клиент OR @Клиент IS NULL)foosh, |
2 мар 13, 18:57 [14003542] Ответить | Цитировать Сообщить модератору |
MiCe Member Откуда: RUSSIA STAVROPOL Pyatigorsk Сообщений: 1996 |
SELECT * FROM з_Расчеты_сумма WHERE Дата BETWEEN (@Начальная_дата) AND ISNULL(@Конечная_дата,getdate()) AND CASE WHEN @КлиентКлиент = null THEN TRUE ELSE Клиент = @Клиент END |
2 мар 13, 19:01 [14003561] Ответить | Цитировать Сообщить модератору |
foosh Member Откуда: Сообщений: 188 |
Благодарю всех за помощь... |
2 мар 13, 23:56 [14004412] Ответить | Цитировать Сообщить модератору |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
....невзлетит.... (@КлиентКлиент = null для MSSQL непрёт) |
||
3 мар 13, 04:07 [14004794] Ответить | Цитировать Сообщить модератору |
Cygapb-007 Member Откуда: Сообщений: 1677 |
должно быть, музыка навеяла... ![]() AND isnull(Клиент,'') like isnull(nullif(@Клиент,''),'%') |
3 мар 13, 11:18 [14004986] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |