执行存储过程后 SQL 服务器返回空值 table

Returning Empty table in SQL Server after execute stored procedure

我的存储过程有问题。我对此有点困惑,因为我之前定义的存储过程工作正常,但现在不起作用。

这里是T-SQL代码:

CREATE PROCEDURE [dbo].[getMonthMaxVal] 
    @from datetime,
    @to datetime
AS
BEGIN
    SET NOCOUNT ON;

    SELECT ds22.*
    FROM (SELECT 
                MAX(DAY(ds.datum)) AS TagMax,
                MONTH(ds.datum) AS MonatMax,
                YEAR(ds.datum) AS JahrMax,
                CONVERT(VARCHAR(10), MAX(ds.datum), 120) AS DatumMax
          FROM QR_DS022s ds
          WHERE ds.datum >= @from AND ds.datum <= @to
          GROUP BY MONTH(ds.datum), YEAR(ds.datum)) maxDate INNER JOIN QR_DS022s ds22 ON maxDate.DatumMax = ds22.datum
    ORDER BY ds22.datum
END

在 SQL Server 2008 R2 中,此存储过程运行良好。在 SQL Server 2014 中它不起作用。怎么了?

编辑:

当我使用代码执行 SP 时:

EXECUTE ETF_DB.dbo.getMonthMaxVal @from='2014-01-01', @to='2014-04-01'

我得到一个空的 table 列。

当我这样做时:

EXECUTE ETF_DB.dbo.getMonthMaxVal @from='2014-01-01', @to='2014-04-02'

我收到一条错误消息:

When converting a varchar data type to a datetime data type, the value is out of range.

虽然我看不到任何数据和 table 结构,但我会删除 VARCHAR 引用并全面使用 DATE:

CREATE PROCEDURE [dbo].[getMonthMaxVal] 
    @from   DATE,
    @to     DATE
AS
BEGIN
    SET NOCOUNT ON;

    SELECT ds22.*
    FROM (  SELECT 
                    MAX(DAY(ds.datum)) AS TagMax,
                    MONTH(ds.datum) AS MonatMax,
                    YEAR(ds.datum) AS JahrMax,
                    CONVERT(DATE, MAX(ds.datum)) AS DatumMax
              FROM QR_DS022s ds
              WHERE ds.datum >= @from AND ds.datum <= @to
              GROUP BY MONTH(ds.datum), YEAR(ds.datum)) maxDate 
          INNER JOIN QR_DS022s ds22 
            ON maxDate.DatumMax = CONVERT(DATE, ds22.datum)
    ORDER BY ds22.datum
END

如果这能解决您的问题,请告诉我。