执行存储过程后 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
如果这能解决您的问题,请告诉我。
我的存储过程有问题。我对此有点困惑,因为我之前定义的存储过程工作正常,但现在不起作用。
这里是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
如果这能解决您的问题,请告诉我。