这样的SQL存储过程怎么修改啊?请大神赐教

qq_39372401 2017-12-10 10:58:04

ALTER PROCEDURE [dbo].[bb_sx_sclr]
@KSRQ varchar(20),
@JSRQ varchar(20)
AS
BEGIN

DECLARE @DATE_S DATETIME,@DATE_E DATETIME --定义时间格式的日期变量
DECLARE @DATE_TMP DATETIME --交换日期用的临时变量
BEGIN TRY --开始校验输入是否合法
SET @DATE_S =CONVERT(DATETIME,@KSRQ) --转换输入的字符串日期到时间格式的变量
SET @DATE_E =CONVERT(DATETIME,@JSRQ) --转换输入的字符串日期到时间格式的变量
IF @DATE_S>@DATE_E --如果开始日期大于结束日期,则交换,允许用户输入日期大小相反
BEGIN
SET @DATE_TMP=@DATE_S
SET @DATE_S=@DATE_E
SET @DATE_E=@DATE_TMP
END
END TRY
BEGIN CATCH --错误处理,校验不通过则输出'0000-00'
SELECT '0000-00' LIST
RETURN
END CATCH
DECLARE @CHAR_MONTH VARCHAR(3) --定义月份的字符串临时变量
truncate table t_sclr

--比较条件:当前年份*12<=目标年和月份则继续
WHILE (DATEPART(YYYY,@DATE_S)*12+DATEPART(MM,@DATE_S)<=DATEPART(YYYY,@DATE_E)*12+DATEPART(MM,@DATE_E))
Begin
SET @CHAR_MONTH=CONVERT(VARCHAR(2),DATEPART(MM,@DATE_S)) --转换当前月份的数据类型到字符串
SET @CHAR_MONTH='0'+@CHAR_MONTH --在月份前加“0”
SET @CHAR_MONTH=SUBSTRING(@CHAR_MONTH,LEN(@CHAR_MONTH)-2+1,2) --截取最后两位确保月份为1和2的时候其显示为01和02

INSERT INTO t_sclr(月份) VALUES(CONVERT(VARCHAR(4),DATEPART(YYYY,@DATE_S))+'-'+@CHAR_MONTH)
SET @DATE_S=DATEADD(MM,1,@DATE_S) --当前月份+1
END
SELECT 月份 FROM t_sclr ORDER BY 月份 ASC --按照先后顺序返回需要的结果列表



--2.装配总数
insert into t_sclr(装配总数) select SUM(b.OUT_NUM) as 发货数量 from t_contract_order a left join T_CONTRACT_ORDER_DETAIL b
on a.sub_account_id=b.sub_account_id
where a.EXTEND50>=@KSRQ and a.EXTEND50<=@JSRQ and a.EXTEND1='博莱特工程'
group by b.OUT_NUM


END



执行的结果没有数据,全是null


EXEC bb_sx_sclr @KSRQ='2014-9-12',@JSRQ='2014-2-12'

SELECT * FROM T_SCLR





...全文
388 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
日月路明 2017-12-10
  • 打赏
  • 举报
回复
1.装配数量和月份应该同时写入表 或者第二步应该使用update能进行更新 2.你指定的条件确实没数据
日月路明 2017-12-10
  • 打赏
  • 举报
回复
1.WHILE (DATEPART(YYYY,@DATE_S)*12+DATEPART(MM,@DATE_S)<=DATEPART(YYYY,@DATE_E)*12+DATEPART(MM,@DATE_E)) Begin     SET @CHAR_MONTH=CONVERT(VARCHAR(2),DATEPART(MM,@DATE_S))        --转换当前月份的数据类型到字符串     SET @CHAR_MONTH='0'+@CHAR_MONTH                                 --在月份前加“0”     SET @CHAR_MONTH=SUBSTRING(@CHAR_MONTH,LEN(@CHAR_MONTH)-2+1,2)   --截取最后两位确保月份为1和2的时候其显示为01和02                                                      INSERT INTO t_sclr(月份) VALUES(CONVERT(VARCHAR(4),DATEPART(YYYY,@DATE_S))+'-'+@CHAR_MONTH)     SET @DATE_S=DATEADD(MM,1,@DATE_S)                               --当前月份+1 END    SELECT 月份 FROM t_sclr ORDER BY 月份 ASC                  --按照先后顺序返回需要的结果列表               --2.装配总数    insert into t_sclr(装配总数) select SUM(b.OUT_NUM) as 发货数量 from t_contract_order a left join T_CONTRACT_ORDER_DETAIL b on a.sub_account_id=b.sub_account_id where a.EXTEND50>=@KSRQ and a.EXTEND50<=@JSRQ and a.EXTEND1='博莱特工程' group by b.OUT_NUM 装配数量和月份应该同时写入表 2.你指定的条件确实没数据

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧