2014-06-30 95 views
0

我試圖SELECT行基於兩個值與此存儲過程:不能轉換日期時間爲Int

ALTER PROCEDURE [dbo].[MYSelect] 

    -- Parameters with default values 
    @MitarbeiterId   AS int, 
    @Wann     AS datetime2(7) 

AS 

    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
     SET NOCOUNT ON; 

     SELECT * 
     FROM [Plan] 
     WHERE RefMitarbeiterId = @MitarbeiterId 
     AND  Jahr    <= YEAR(@Wann) 
     AND  Monat    <= MONTH(@Wann) 
     AND  Abgeschlossen  = 0 

的問題是以下部分:

 AND  Jahr    <= YEAR(@Wann) 
     AND  Monat    <= MONTH(@Wann) 

我不知道爲什麼這部分導致(語法)問題。包含這些行,使用MSSQL Studio,我收到一個錯誤unable to convert DateTime to Integer。刪除這些返回結果並且沒有語法錯誤。我在其他地方使用YEAR()MONTH(),所以我很困惑這裏爲什麼會有問題。

這是Plan表:

Plan Table

+1

而且問題是什麼? –

回答

0

測試運行此程序的不同方式後,行,
我現在認爲這是一個錯誤,如果你使用帶有日期時間參數的查看中SQL服務器Manangement工作室

因爲我測試

EXEC

enter image description here

效果很好

然後刪除我的參數

enter image description here
它返回它告訴我,這是無法'01.07.2014 00:00:00'轉換爲datetime一個錯誤,但它返回right Row

如果我現在再次使用我的參數和a DD我的價值觀

enter image description here

我得到它告訴我同樣的一個例外,認爲像上述錯誤,所以我不得不刪除',然後我得到的unable to convert DateTime to Integer它是在我看來,一個bug

1

條件

AND Jahr <= YEAR(@Wann) 
AND Monat <= MONTH(@Wann) 

分離條件,年份和月份。

這並不意味着年,月少於參數的年份,但年份小於或等於參數的年份,月份小於或等於參數的月份。

用今天(2014-06-30)爲參數的查詢將返回1和6之間的所有行上與Monat過去和目前一年:從2013年12月該行,例如,將不予退還。

要獲取所有參數的日期之前,您需要更改的條件

AND ((Jahr = YEAR(@Wann) AND Monat <= MONTH(@Wann)) 
    OR Jahr < YEAR(@Wann)) 
+0

我得到相同的錯誤 – WiiMaxx

+0

mhh,我也用不同的方式執行過程,總是有相同的參數。它看起來像一個錯誤,如果你使用一個視圖來標記它給出這個錯誤的過程,但如果你通過'EXEC'運行它,它工作正常 – WiiMaxx