2017-07-28 41 views
1

我已經實現了存儲過程,並且基本上希望存儲過程在沒有發送參數或基於發送參數的記錄的情況下返回所有記錄。我使用日期作爲參數。執行exec [dbo].[getLog] '27/07/2017'時出現錯誤。錯誤是將數據類型varchar轉換爲datetime時出錯。如果沒有指定日期,需要根據日期或所有記錄返回記錄

將數據類型varchar轉換爲datetime時出錯。

有人能告訴我什麼邏輯

Create PROCEDURE [dbo].[getLog] 
@dateFrom datetime 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    SELECT * from [CoreAnalytics].[dbo].[Logs] 
    where [TimeStamp] > ISNULL(@dateFrom, 0) ; 
END 
GO 
+0

是什麼Logs.TimeStamp的dataype? – GuidoG

+0

它的日期時間數據類型 – Tom

+0

所以如果dateFrom變量爲空比你在做的地方時間戳> 0 – GuidoG

回答

1

如果我理解你糾正你想返回所有的記錄,如果@dateFrom爲null,或者該變量過濾不正確。
我認爲你需要這樣的事再

Create PROCEDURE [dbo].[getLog] @dateFrom datetime 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    SELECT * from [CoreAnalytics].[dbo].[Logs] 
    where (@dateFrom is null or [TimeStamp] > @dateFrom) 
END 

確保調用過程,當你通過一個有效的日期時間。
最好使用適用於任何數據庫的通用格式,

yyyyMMdd是一種始終有效的格式。 又見http://www.karaszi.com/SQLServer/info_datetime.asp#DtFormatsInput

exec [dbo].[getLog] '20170727' 

始終有效

+0

我仍然收到錯誤將數據類型varchar轉換爲datetime時出錯。 執行exec [dbo]。[getLog] '27/07/2017' – Tom

+0

是否確定這是該過程中唯一的代碼? – GuidoG

+0

你確定字段TimeStamp的類型是datetime嗎? – GuidoG

相關問題