2015-06-19 24 views
0

我已經設置了一個SQL存儲過程,其中參數是可選的,因爲在前端中,這些過濾器的任何組合都可以具有值或不具有值。唯一的問題是當我傳遞一個空日期時SQL會產生一個錯誤,如果我留下這個空,但我已設法做一些解讀這個問題,並發現使用以下應該可以解決錯誤:SQL中的可選DateTime參數

SET @SessionStarted = ISNULL(@SessionStarted, GETDATE()) 

但是,它現在不返回它應該返回的記錄,因爲它只查找包含當前日期和時間的記錄。

的參數定義爲這樣:

@SessionStarted datetime = NULL, 

而對於這個特定參數的where子句:

(@SessionStarted IS NULL OR VisitDate = @SessionStarted) 

反正有圓這個問題,當爲一個值不能指定?

+0

@SessionStarted是一個DATETIME。什麼數據類型是'VisitDate'?如果是DATETIME/DATETIME2/SMALLDATETIME,則該列中的值是「僅限日期」,時間部分已剝離? – DMason

+0

VisitDate是一個DateTime字段,與參數 –

+0

相同如果您使用「VisitDate」列查詢表,數據是什麼樣的?你看到像'2015-06-19 12:28:49.083'這樣的值嗎?或者看起來更像這個'2015-06-19 00:00:00.000'? – DMason

回答

0

你可以在你的isnull中使用不同的日期並檢測它。像'1900-01-01'這樣的東西感覺像是一個很好的「已知的無效」日來代替你的NULL。

0

當分配當前日期時間(如下面) SET @SessionStarted = ISNULL(@SessionStarted,GETDATE())

一個變量,並比較它(如下文)針對日期時間dattyped柱,這將永不平等,不會返回記錄。

(@SessionStarted爲空或VisitDate = @SessionStarted)

你應該確保什麼重視您的datetime列持有的,哪些是在傳遞的情況下,NULL值被賦給變量您預計的默認值