关于:存储过程的一些小问题

manbuyunwai 2010-10-17 11:23:13
以下是我写的存储过程,关于刷新库存记录的。但在SQL中执行,一直报错,实在是找不出哪里有错。恳请各位高手指导!
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[原料库存初始化]
/*@cnbh varchar(20),
@scrq datetime,*/

AS
BEGIN transaction
/*库存中没有记录,增加记录*/
INSERT INTO WZ原料库存明细 (厂内编号,来唛或规格,原料名称,产地,批号,生产日期,技术品级,单位,单件公定,仓库编号,仓库名称,库存件数,库存重量)
     SELECT rc.厂内编号, rc.来唛或规格, rc.原料名称, rc.产地, rc.批号, rc.生产日期, rc.技术品级, rc.单位, null, rc.仓库编号, rc.仓库名称, null,null
FROM WZ原料入库明细 AS rc left join WZ原料库存明细 AS kc on(rc.厂内编号=kc.厂内编号 and rc.生产日期=kc.生产日期)
WHERE kc.厂内编号 is null
/*修改库存信息*/
UPDATE WZ原料库存明细 SET 单价=case when 库存件数<=0 or (库存件数+件数ALL)<=0 then 单价
ELSE (库存金额+金额ALL)/(库存重量 + 厂检公定ALL) END,
单件公定=case when 库存件数<=0 or (库存件数+件数ALL)<=0 then 单件公定
ELSE (库存重量+厂检公定ALLL)/(库存件数 + 件数ALL) END,
库存件数 = 库存件数+件数ALL,
库存重量= 库存重量+厂检公定ALL,
库存金额=case when 库存件数<=0 or (库存件数+件数ALL)<=0
then 单价*(库存重量+厂检公定ALL)ELSE(库存金额+金额ALL) END,
FROM
(SELECT 仓库,厂内编号,'件数ALL'=sum(件数),'单价'=sum(金额)/sum(厂检公定),'金额ALL'=sum(金额),'厂检公定ALL'=sum(厂检公定)
FROM WZ原料入库明细 GROUP BY 厂内编号,生产日期) AS RK
WHERE WZ原料库存明细.厂内编号=RK.厂内编号 AND WZ原料库存明细.生产日期=RK.生产日期
/*加入历史*/
INSERT INTO WZ原料验收入库单_历史 SELECT * FROM WZ原料验收入库单
INSERT INTO WZ原料入库明细_历史 SELECT * FROM WZ原料入库明细
/*清除WZ原料验收入库单*/
DELETE FROM WZ原料入库明细
DELETE FROM WZ原料验收入库单
COMMIT
GO
错误信息:
消息 170,级别 15,状态 1,过程 原料库存初始化,第 10 行
第 10 行: ' ' 附近有语法错误。
消息 156,级别 15,状态 1,过程 原料库存初始化,第 22 行
在关键字 'FROM' 附近有语法错误。
消息 156,级别 15,状态 1,过程 原料库存初始化,第 24 行
在关键字 'AS' 附近有语法错误。
...全文
82 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
manbuyunwai 2010-10-20
  • 打赏
  • 举报
回复
问题解决,谢谢各位!
abuying 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 manbuyunwai 的回复:]

修改了一下
/*修改库存信息*/
UPDATE WZ原料库存明细 SET 单价=case when 库存件数<=0 or (库存件数+件数ALL)<=0 then 单价
ELSE (库存金额+金额ALL)/(库存重量 + 厂检公定ALL) END,
单件公定=case when 库存件数<=0 or (……
[/Quote]

少了from

then 单价*(库存重量+厂检公定ALL)ELSE(库存金额+金额ALL) END
from --加上
(SELECT 厂内编号,生产日期,'件数ALL'=sum(件数),'单价'=sum(金额)/sum(厂检公定),'金额ALL'=sum(金额),'厂检公定ALL'=sum(厂检公定)
喜-喜 2010-10-17
  • 打赏
  • 举报
回复
'试试....'

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[原料库存初始化]
/*@cnbh varchar(20),
@scrq datetime,*/

AS
BEGIN transaction
/*库存中没有记录,增加记录*/
INSERT INTO WZ原料库存明细 (厂内编号,来唛或规格,原料名称,产地,批号,生产日期,技术品级,单位,单件公定,仓库编号,仓库名称,库存件数,库存重量)

--############## select前面有四个全角空格,所以编译出错 #################
SELECT rc.厂内编号, rc.来唛或规格, rc.原料名称, rc.产地, rc.批号, rc.生产日期, rc.技术品级, rc.单位, null, rc.仓库编号, rc.仓库名称, null,null
FROM WZ原料入库明细 AS rc left join WZ原料库存明细 AS kc on(rc.厂内编号=kc.厂内编号 and rc.生产日期=kc.生产日期)
WHERE kc.厂内编号 is null
/*修改库存信息*/
UPDATE WZ原料库存明细 SET 单价=case when 库存件数<=0 or (库存件数+件数ALL)<=0 then 单价
ELSE (库存金额+金额ALL)/(库存重量 + 厂检公定ALL) END,
单件公定=case when 库存件数<=0 or (库存件数+件数ALL)<=0 then 单件公定
ELSE (库存重量+厂检公定ALLL)/(库存件数 + 件数ALL) END,
库存件数 = 库存件数+件数ALL,
库存重量= 库存重量+厂检公定ALL,
库存金额=case when 库存件数<=0 or (库存件数+件数ALL)<=0
then 单价*(库存重量+厂检公定ALL)ELSE(库存金额+金额ALL) END --######## 这里多了个逗号
FROM
(SELECT 仓库,厂内编号,'件数ALL'=sum(件数),'单价'=sum(金额)/sum(厂检公定),'金额ALL'=sum(金额),'厂检公定ALL'=sum(厂检公定)
FROM WZ原料入库明细 GROUP BY 厂内编号,生产日期) AS RK
WHERE WZ原料库存明细.厂内编号=RK.厂内编号 AND WZ原料库存明细.生产日期=RK.生产日期
/*加入历史*/
INSERT INTO WZ原料验收入库单_历史 SELECT * FROM WZ原料验收入库单
INSERT INTO WZ原料入库明细_历史 SELECT * FROM WZ原料入库明细
/*清除WZ原料验收入库单*/
DELETE FROM WZ原料入库明细
DELETE FROM WZ原料验收入库单
COMMIT
GO
manbuyunwai 2010-10-17
  • 打赏
  • 举报
回复
数据库中不可以对多条记录同时更新吗

SQLCenter 2010-10-17
  • 打赏
  • 举报
回复
CREATE PROCEDURE [dbo].[原料库存初始化]
/*@cnbh varchar(20),
@scrq datetime,*/

AS
BEGIN transaction
/*库存中没有记录,增加记录*/
INSERT INTO WZ原料库存明细 (厂内编号,来唛或规格,原料名称,产地,批号,生产日期,技术品级,单位,单件公定,仓库编号,仓库名称,库存件数,库存重量)
SELECT rc.厂内编号, rc.来唛或规格, rc.原料名称, rc.产地, rc.批号, rc.生产日期, rc.技术品级, rc.单位, null, rc.仓库编号, rc.仓库名称, null, null
FROM WZ原料入库明细 AS rc left join WZ原料库存明细 AS kc on rc.厂内编号=kc.厂内编号 and rc.生产日期=kc.生产日期
WHERE kc.厂内编号 is null

/*修改库存信息*/
UPDATE WZ原料库存明细 SET 单价=case when 库存件数<=0 or (库存件数+件数ALL)<=0 then 单价
ELSE (库存金额+金额ALL)/(库存重量 + 厂检公定ALL) END,
单件公定=case when 库存件数<=0 or (库存件数+件数ALL)<=0 then 单件公定
ELSE (库存重量+厂检公定ALLL)/(库存件数 + 件数ALL) END,
库存件数 = 库存件数+件数ALL,
库存重量= 库存重量+厂检公定ALL,
库存金额=case when 库存件数<=0 or (库存件数+件数ALL)<=0
then 单价*(库存重量+厂检公定ALL)ELSE(库存金额+金额ALL) END
FROM
(SELECT 仓库,厂内编号,'件数ALL'=sum(件数),'单价'=sum(金额)/sum(厂检公定),'金额ALL'=sum(金额),'厂检公定ALL'=sum(厂检公定)
FROM WZ原料入库明细 GROUP BY 厂内编号,生产日期) AS RK
WHERE WZ原料库存明细.厂内编号=RK.厂内编号 AND WZ原料库存明细.生产日期=RK.生产日期
/*加入历史*/
INSERT INTO WZ原料验收入库单_历史 SELECT * FROM WZ原料验收入库单
INSERT INTO WZ原料入库明细_历史 SELECT * FROM WZ原料入库明细
/*清除WZ原料验收入库单*/
DELETE FROM WZ原料入库明细
DELETE FROM WZ原料验收入库单

COMMIT transaction
GO
manbuyunwai 2010-10-17
  • 打赏
  • 举报
回复
修改了一下
/*修改库存信息*/
UPDATE WZ原料库存明细 SET 单价=case when 库存件数<=0 or (库存件数+件数ALL)<=0 then 单价
ELSE (库存金额+金额ALL)/(库存重量 + 厂检公定ALL) END,
单件公定=case when 库存件数<=0 or (库存件数+件数ALL)<=0 then 单件公定
ELSE (库存重量+厂检公定ALLL)/(库存件数 + 件数ALL) END,
库存件数 = 库存件数+件数ALL,
库存重量= 库存重量+厂检公定ALL,
库存金额=case when 库存件数<=0 or (库存件数+件数ALL)<=0
then 单价*(库存重量+厂检公定ALL)ELSE(库存金额+金额ALL) END

(SELECT 厂内编号,生产日期,'件数ALL'=sum(件数),'单价'=sum(金额)/sum(厂检公定),'金额ALL'=sum(金额),'厂检公定ALL'=sum(厂检公定)
FROM WZ原料入库明细 GROUP BY 厂内编号,生产日期)as jc
WHERE WZ原料库存明细.厂内编号=jc.厂内编号 AND WZ原料库存明细.生产日期=jc.生产日期
系统提示错误:
消息 156,级别 15,状态 1,过程 原料库存初始化,第 24 行
在关键字 'as' 附近有语法错误。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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