【发布时间】:2015-11-02 08:25:00
【问题描述】:
我的存储过程有问题。我对此有点困惑,因为我之前定义的存储过程可以正常工作,但现在它不起作用。
这里是 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'
我得到一个空列的空表。
当我这样做时:
EXECUTE ETF_DB.dbo.getMonthMaxVal @from='2014-01-01', @to='2014-04-02'
我收到一条错误消息:
将 varchar 数据类型转换为 datetime 数据类型时,值 超出范围。
【问题讨论】:
-
定义工作/不工作。提供更多背景。分享相关架构。一般阅读How to Ask
-
@Amit 我猜你可以阅读我的存储过程。好吧,如果您理解上面的代码,您可以看到我想返回表
ds22中的所有列,但只返回该月的最后一天。因此我定义了一个子选择。当我使用EXECUTE ETF_DB.dbo.getMonthMaxVal @from='2014-01-01', @to='2014-04-01'执行 SP 时,我得到一个空列的空表。 -
尝试使用 DATE 数据类型而不是 DATETIME 和 VARCHAR 来处理只有日期的值,没有时间组件
标签: sql-server tsql stored-procedures sql-server-2008-r2 sql-server-2014