Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с передаче параметров типа Datetime ХП 
:(
    Опции темы
Houl
Дата 18.9.2009, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 18.9.2009

Репутация: нет
Всего: нет



Код

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE Outlook_import
    @login varchar(max) = '%%',
    @StartDate datetime = '1888-01-01 00:00:00',  -- (1)-- dateadd( dd, -7, CURRENT_TIMESTAMP),
    @FinishDate datetime = '1888-01-01 00:00:00'  --(2)-- dateadd( dd, 21, CURRENT_TIMESTAMP)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    --SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
--3    
if @StartDate = '1888-01-01 00:00:00'
    BEGIN
    set @StartDate = dateadd( dd, -7, CURRENT_TIMESTAMP)
    END
        if @FinishDate = '1888-01-01 00:00:00'
    BEGIN
    set @StartDate = dateadd( dd, 21, CURRENT_TIMESTAMP)
    END
--4
SELECT    '1|'+
        .......
FROM    EVENTS as E
........

where    U1.Login like @login
and
((@StartDate >= E.StartDate and @StartDate <= E.FinishDate)
or
(@FinishDate >= E.StartDate and @FinishDate <= E.FinishDate)
)
END
GO

Есть хранимая процедура, которая должна отбирать из БД записи за определённый период. Если период не задан, то по умолчанию она должна возвращать данные за период текущая дата - 7д и до ТД+21 д
Однако обнаруживалась проблема
1. закомментаренные функции (1) и (2) в стр.8 и стр.9 не срабатывают, из-за чего приходится идти на ухищрения: по умолчанию забивать не реальные даты и проверять есть ли их изменения (стр.19-25)
В результате если параметры при вызове процедуры не указаны, то процедура выполняется нормально,
но если пытаюсь передать хоть один параметр, процедура возвращает пустой запрос.

PM MAIL   Вверх
Deniz
Дата 21.9.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 1
Всего: 44



Houl, можно попробовать вывести передаваемые параметры и проверить их.
Беглый взгляд показал, что условие отбора по периоду не корректно, ИМХО.
В результат не попадут записи, у которых "начало" (E.StartDate) раньше "начала периода" (@StartDate) и "конец" (E.FinishDate) больше "конца периода" (E.FinishDate).
Нужно так:
Код
...
where
  U1.Login like @login
and
  (@StartDate <= E.FinishDate) 
and
  (@FinishDate >= E.StartDate)
...



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.