2015-11-02 26 views
1

我會盡可能清楚我所需要的。基本上,我有'FromDate'和'ToDate'參數。默認情況下,我希望這些參數包含所有日期/時間。我可以通過檢查'允許空值'並處理主存儲過程中的NULL來實現這一點。不幸的是,商業用戶不會理解Null複選框的含義。另外,我可以將默認日期設置爲SQL Server支持的最早和最遲日期,但這很醜陋。因此,我需要解決。 我需要一些方法來將這些參數默認爲空白值,這樣當我運行報告時,無論日期如何,我都立即獲取記錄。然後,如果用戶想調整日期,他們應該能夠點擊日曆圖標並選擇From和To Dates(該參數必須保持日期時間)。 有什麼建議嗎?空白日期參數而不是使用'允許空'複選框

+0

日期時間不能是「空白值」。一個空字符串將被隱式轉換爲1900-01-01。當參數是可選的時,爲什麼使用默認的醜陋解決方案? –

回答

0

編輯:剛纔看到你正在使用SSRS - 可以使包含FROM_DATE表達式中的文本框:

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

對於UI或報告,你可以掩蓋SQL分鐘日期值作爲空字符串或「選擇日期...」字符串?

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

因爲這隻會影響報表/ UI顯示日期的方式,所以您不必在SQL表中允許NULL日期。保存時,你必須做相反的..如果from_date_on_report =「」然後設置from_date_to_save_to_SQL_table ='1753-01-01'

+0

不幸的是,沒有辦法屏蔽參數標籤,因爲我仍然需要日曆彈出工作:/ – user3388656

0

我會通過在存儲過程中進行更改使參數在報告上可選。

如果用戶沒有選擇日期,請確保空值或沒有值傳遞給參數(默認設置爲空),如果他們確實選擇日期值應該傳遞給過程,並且您的程序應該看起來像.....

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 
相關問題