无法将Datetime转换为Int

时间:2014-06-30 15:03:56

标签: sql stored-procedures sql-server-2012

我正在使用此存储过程基于两个值尝试SELECT行:

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

2 个答案:

答案 0 :(得分:1)

条件

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

将条件分为年和月。

它并不意味着年份和月份小于参数,但年份小于或等于参数年份月份小于或等于月份参数。

使用今天(2014-06-30)作为参数,您的查询将返回过去和当年Monat在1到6之间的每一行:例如,2013年12月的行将不会返回。

要获取参数日期之前的所有行,您需要将条件更改为

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

答案 1 :(得分:0)

测试了运行此程序的不同方法后,
我现在认为如果你在 SQL Server Manangement Studio中使用带有日期时间参数的视图

,这是一个错误

因为我测试了

EXEC

enter image description here

效果很好

然后删除了我的参数

enter image description here
这会返回一个错误,告诉我它无法将'01.07.2014 00:00:00'转换为日期时间,但会返回正确的行

如果我现在再次使用我的参数并添加我的值

enter image description here

我得到一个异常,告诉我同样的想法,如上面的错误,所以我必须删除'然后我得到unable to convert DateTime to Integer这是我认为的错误