Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с передаче параметров типа Datetime ХП  [new]
MaxBod
Member

Откуда: Москва
Сообщений: 58
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)
В результате если параметры при вызове процедуры не указаны, то процедура выполняется нормально,
но если пытаюсь передать хоть один параметр, процедура возвращает пустой запрос.
18 сен 09, 18:26    [7681119]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с передаче параметров типа Datetime ХП  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> if @FinishDate = '1888-01-01 00:00:00'
> BEGIN
> set @StartDate = dateadd( dd, *21*, CURRENT_TIMESTAMP)
> END

Posted via ActualForum NNTP Server 1.4

18 сен 09, 18:32    [7681143]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с передаче параметров типа Datetime ХП  [new]
iljy
Member

Откуда:
Сообщений: 8711
MaxBod,

обычно в таких случаях по умолчанию используют значение NULL, и проверка становится сильно проще
set @StartDate = isnull(@StartDate, dateadd( dd, -7, CURRENT_TIMESTAMP))

а по поводу возвращаемой выборки - это сами смотрите чего у вас в базе есть.
18 сен 09, 18:33    [7681144]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с передаче параметров типа Datetime ХП  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
все таки помоему инициаизировать параметры ф-циями нельзя :(( хотя нигде об етом не написано..

вы проверяли что у вас в переменых если передать даты ,перед селектом в теле процедуры ?
-------------------------------------
Jedem Das Seine
18 сен 09, 18:36    [7681155]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с передаче параметров типа Datetime ХП  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
MaxBod
and
((@StartDate >= E.StartDate and @StartDate <= E.FinishDate)
or
(@FinishDate >= E.StartDate and @FinishDate <= E.FinishDate)
)
Представим, что в таблице одна запись, в которой E.FinishDate == E.StartDate == 2-е янв. 2009 г.
Представим, что на вход поступило @StartDate == 1-е янв. 2009 г. и @FinishDate == 3-е янв. 2009 г.

Выберется ли эта запись?
А должна ли она выбраться?
18 сен 09, 18:40    [7681169]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с передаче параметров типа Datetime ХП  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
А что мешает задать значения по-умолчанию NULL, а в начале процедуры написать
SELECT
 @StartDate=ISNULL(@StartDate, DATEADD(DAY,-7, CURRENT_TIMESTAMP)
,@FinishDate=ISNULL(@StartDate, DATEADD(DAY,21, CURRENT_TIMESTAMP);
?
18 сен 09, 18:40    [7681170]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с передаче параметров типа Datetime ХП  [new]
MaxBod
Member

Откуда: Москва
Сообщений: 58
Спасибо, за показные ошибки
согласен
(
(E.StartDate >= @StartDate and E.StartDate <= @FinishDate)
or
(E.FinishDate >= @StartDate and E.FinishDate <= @FinishDate)
)
18 сен 09, 18:54    [7681212]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с передаче параметров типа Datetime ХП  [new]
MaxBod
Member

Откуда: Москва
Сообщений: 58
MaxBod,
Спасибо всем,
код подправил
(
(
E.StartDate >= (ISNULL(@StartDate, DATEADD(DAY,-7, CURRENT_TIMESTAMP)))
and
E.StartDate <= (ISNULL(@FinishDate, DATEADD(DAY,21, CURRENT_TIMESTAMP)))
)
or
(
E.FinishDate >= (ISNULL(@StartDate, DATEADD(DAY,-7, CURRENT_TIMESTAMP)))
and
E.FinishDate <= (ISNULL(@FinishDate, DATEADD(DAY,21, CURRENT_TIMESTAMP)))
)
)
18 сен 09, 19:17    [7681274]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить