我在sql上创建了以下存储过程:
CREATE PROCEDURE Sp_generate_report (@YEAR INT,
@MONTH INT)
AS
DECLARE @CATEGORY VARCHAR(20)
DECLARE @BEGIN_DATE DATE
DECLARE @END_DATE DATE
BEGIN
SELECT @BEGIN_DATE = Cast(( Cast(@YEAR AS VARCHAR) + '-'
+ Cast(@MONTH AS VARCHAR) + '-' + '1' ) AS DATE)
SELECT @END_DATE = Cast(( Cast(@YEAR AS VARCHAR) + '-' +
Cast(@MONTH AS VARCHAR) + '-' + '32' ) AS DATE)
SELECT TOP 1 @CATEGORY = Name
FROM dbo.Profitible_categories(@BEGIN_DATE, @END_DATE)
INSERT INTO dbo.MONTHLY_SUMMARY_REPORTS
VALUES (@CATEGORY)
END
该过程已成功创建,但当我尝试使用以下命令执行它时:
EXECUTE SP_GENERATE_REPORT 2012, 7
我收到此错误消息:
Msg 241,Level 16,State 1,Procedure SP_GENERATE_REPORT,Line 8
从字符转换日期和/或时间时转换失败 字符串。
提前感谢您的帮助。
答案 0 :(得分:4)
你可以计算一个月的最后一天没有那些令人讨厌的字符串连接,或者试着猜出它是哪个月并选择最后一天。
CREATE PROCEDURE dbo.Sp_generate_report
@YEAR INT,
@MONTH INT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @BEGIN_DATE DATE = DATEADD(MONTH, @MONTH-1, CONVERT(DATE,
CONVERT(CHAR(4), YEAR) + '0101'));
DECLARE @END_DATE DATE = DATEADD(DAY, -1, DATEADD(MONTH, 1, @BEGIN_DATE));
INSERT INTO dbo.MONTHLY_SUMMARY_REPORTS
SELECT TOP (1) Name
FROM dbo.Profitible_categories(@BEGIN_DATE, @END_DATE);
END
GO