Пустой параметр даты Вместо использования флажка "Разрешить ноль"

Я постараюсь быть максимально ясным с тем, что мне нужно здесь. По сути, у меня есть параметры "FromDate" и "ToDate". По умолчанию я хочу, чтобы эти параметры включали ВСЕ даты / время. Я могу добиться этого, проверив "Allow Null" и обработав NULL в основной хранимой процедуре. К сожалению, бизнес-пользователи не поймут, что означает флажок Null. Кроме того, я могу установить даты по умолчанию как самые ранние и самые поздние даты, поддерживаемые SQL Server, но это ужасно. Таким образом, мне нужно обойти. Мне нужен какой-то способ, чтобы эти параметры по умолчанию имели пустое значение, чтобы при запуске отчета я немедленно возвращал записи независимо от даты. Затем, если пользователь хочет настроить дату, он должен иметь возможность щелкнуть значок "Календарь" и выбрать "От и до дат" (параметр ДОЛЖЕН оставаться "Дата и время"). Есть идеи?

2 ответа

Редактировать: только что увидел, что вы используете SSRS - вы можете сделать текстовое поле, содержащее выражение from_date выражением:

=iif(Parameters!from_date="1753-01-01","",Parameters!from_date)

Для пользовательского интерфейса или отчета, вы можете просто замаскировать минимальное значение даты SQL как пустую строку или строку "выбрать дату..."?

if from_date_in_sql = '1753-01-01' then
    from_date_on_report = ""
end if

Поскольку это повлияет только на то, как отчет / пользовательский интерфейс отображает дату, вам не нужно разрешать значения NULL в таблице SQL. При сохранении вы должны сделать обратное.. если from_date_on_report = "" затем установить from_date_to_save_to_SQL_table = '1753-01-01'

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

Если пользователи не выбирают дату, убедитесь, что значение параметра равно нулю или значение не задано (по умолчанию оно равно нулю), если они выбирают дату, значение даты должно быть передано процедуре, а ваша процедура должна выглядеть как-то лайк.....

CREATE PROCEDURE my_report_Sp
  @StartDate DATE = NULL
 ,@EndDate   DATE = NULL
AS
BEGIN
   SET NOCOUNT ON;
   Declare @Sql NVARCHAR(MAX);

SET @Sql = N' SELECT * FROM TableName WHERE 1 = 1 '
        + CASE WHEN @StartDate IS NOT NULL
          THEN N' AND DateColumn >= @StartDate' ELSE N'' END
        + CASE WHEN @EndDate IS NOT NULL
          THEN N' AND DateColumn <= @EndDate' ELSE N'' END        

Exec sp_executesql @Sql 
                  ,N'@StartDate DATE,@EndDateDATE '
                  ,@StartDate
                  ,@EndDate

END
Другие вопросы по тегам