2014-06-30 93 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