存储过程问题,谁能帮手解决,急死人了.

sh_chen168 2002-01-25 05:54:49
我建立的存储过程如下,代码运行到标号为err:出就不执行了,跳出来了.
CREATE PROCEDURE sp交费通知单bak(@dyno nvarchar(50),@pcname nvarchar(50)) AS

if not exists (select * from sysobjects where id = object_id(N'[dbo].[tmp_交费通知单]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
--如果缺少什么字段在以下语句中加上缺少的字段并删除表 "tmp_交费通知单" 和 "tmp_单元交费通知单"

select TOP 100 PERCENT @pcname as 电脑名称, 楼盘.楼盘编号, 楼盘.楼盘名称, 楼阁.楼阁编号,
楼阁.楼阁名称, 单元.楼层名称, 单元.单元编号, 单元.单元名称,单元计费.住户编号, 住户资料.住户名称,
单元.住户编号 AS 当前住户编号, 住户资料.联系地址, 住户资料.邮政编码, 住户资料.联系电话, 收费项目.收费项目,
单元计费.计费日期, 单元计费.计费起始日期, 单元计费.计费终止日期,单元计费.收款终止日期, 单元计费.单价,
单元计费.应计金额, 单元计费.实收金额, 单元计费.前期预收, 单元计费.上次行度, 单元计费.本次行度, 单元计费.行度,
单元计费.汇率,单元计费.币种, 单元计费.备注, 单元计费.应计金额 - 单元计费.实收金额 - 单元计费.前期预收 AS 未收金额
into tmp_交费通知单 FROM 楼阁 INNER JOIN 单元 ON 楼阁.楼阁编号 = 单元.楼阁编号 INNER JOIN 单元计费 INNER JOIN
收费项目 ON 单元计费.收费项目id = 收费项目.收费项目ID ON 单元.单元编号 = 单元计费.单元编号 INNER JOIN
楼盘 ON 楼阁.楼盘编号 = 楼盘.楼盘编号 LEFT OUTER JOIN 住户资料 ON 单元计费.住户编号 = 住户资料.住户编号 where 单元.单元编号=@dyno order by 收费项目,计费日期

end

else

begin
--如果缺少什么字段在以下语句中加上缺少的字段并删除表 "tmp_交费通知单" 和 "tmp_单元交费通知单"
delete from tmp_交费通知单 where 电脑名称=@pcname
insert into tmp_交费通知单 SELECT TOP 100 PERCENT @pcname as 电脑名称, 楼盘.楼盘编号, 楼盘.楼盘名称, 楼阁.楼阁编号,
楼阁.楼阁名称, 单元.楼层名称, 单元.单元编号, 单元.单元名称,单元计费.住户编号, 住户资料.住户名称,
单元.住户编号 AS 当前住户编号, 住户资料.联系地址, 住户资料.邮政编码, 住户资料.联系电话, 收费项目.收费项目,
单元计费.计费日期, 单元计费.计费起始日期, 单元计费.计费终止日期,单元计费.收款终止日期, 单元计费.单价,
单元计费.应计金额, 单元计费.实收金额, 单元计费.前期预收, 单元计费.上次行度, 单元计费.本次行度, 单元计费.行度,
单元计费.汇率,单元计费.币种, 单元计费.备注, 单元计费.应计金额 - 单元计费.实收金额 - 单元计费.前期预收 AS 未收金额
FROM 楼阁 INNER JOIN 单元 ON 楼阁.楼阁编号 = 单元.楼阁编号 INNER JOIN 单元计费 INNER JOIN
收费项目 ON 单元计费.收费项目id = 收费项目.收费项目ID ON 单元.单元编号 = 单元计费.单元编号 INNER JOIN
楼盘 ON 楼阁.楼盘编号 = 楼盘.楼盘编号 LEFT OUTER JOIN 住户资料 ON 单元计费.住户编号 = 住户资料.住户编号 where 单元.单元编号=@dyno order by 收费项目,计费日期

end

update 单据类别 set 数据源1='tmp_单元交费通知单',数据源2='tmp_单元交费通知单' where 单据名称='单元交费通知书'


if not exists (select * from sysobjects where id = object_id(N'[dbo].[tmp_单元交费通知单]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
select * into tmp_单元交费通知单 from tmp_交费通知单 where 电脑名称=@pcname and 收费项目 not like '%电费%' and 收费项目 not like '%水费%' and 收费项目 not like '%煤气费%'
err: alter table tmp_单元交费通知单 add 电费期间 nvarchar(50)--代码运行到此处就不运行了,WHY?
alter table tmp_单元交费通知单 add 电费单价 money
alter table tmp_单元交费通知单 add 电费金额 money
alter table tmp_单元交费通知单 add 电表上次度数 money
alter table tmp_单元交费通知单 add 电表本次度数 money
alter table tmp_单元交费通知单 add 煤气费期间 nvarchar(50)
alter table tmp_单元交费通知单 add 煤气费单价 money
alter table tmp_单元交费通知单 add 煤气费金额 money
alter table tmp_单元交费通知单 add 煤气表上次度数 money
alter table tmp_单元交费通知单 add 煤气表本次度数 money

alter table tmp_单元交费通知单 add 水费期间 nvarchar(50)
alter table tmp_单元交费通知单 add 水费单价 money
alter table tmp_单元交费通知单 add 水费金额 money
alter table tmp_单元交费通知单 add 水表上次度数 money
alter table tmp_单元交费通知单 add 水表本次度数 money

alter table tmp_单元交费通知单 add 港币金额 money
alter table tmp_单元交费通知单 add 港币合计 money
alter table tmp_单元交费通知单 add 人民币金额 money
alter table tmp_单元交费通知单 add 人民币合计 money

end

else

begin
delete from tmp_单元交费通知单 where 电脑名称=@pcname
insert into tmp_单元交费通知单 select tmp_交费通知单.*,'',0,0,0,0,'',0,0,0,0,'',0,0,0,0,0,0,0,0 from tmp_交费通知单 where 电脑名称=@pcname and 收费项目 not like '%电费%' and 收费项目 not like '%水费%' and 收费项目 not like '%煤气费%'
end


update tmp_单元交费通知单 set 电费期间=ss.qj,电费单价=ss.dj,电费金额=ss.je,电表上次度数=ss.scds,电表本次度数=ss.bcds from (select convert(nvarchar(10),计费起始日期,20)+'-'+convert(nvarchar(10),计费终止日期,20) as qj,单价 as dj,未收金额 as je,上次读数 as scds,本次读数 as bcds from tmp_交费通知单 where 电脑名称=@pcname and 收费项目 like '%电费%' ) as ss
update tmp_单元交费通知单 set 水费期间=ss.qj,水费单价=ss.dj,水费金额=ss.je,水表上次度数=ss.scds,水表本次度数=ss.bcds from (select convert(nvarchar(10),计费起始日期,20)+'-'+convert(nvarchar(10),计费终止日期,20) as qj,单价 as dj,未收金额 as je,上次读数 as scds,本次读数 as bcds from tmp_交费通知单 where 电脑名称=@pcname and 收费项目 like '%水费%' ) as ss
update tmp_单元交费通知单 set 煤气费期间=ss.qj,煤气费单价=ss.dj,煤气费金额=ss.je,煤气表上次度数=ss.scds,煤气表本次度数=ss.bcds from (select convert(nvarchar(10),计费起始日期,20)+'-'+convert(nvarchar(10),计费终止日期,20) as qj,单价 as dj,未收金额 as je,上次读数 as scds,本次读数 as bcds from tmp_交费通知单 where 电脑名称=@pcname and 收费项目 like '%煤气费%' ) as ss

update tmp_单元交费通知单 set 港币金额=应计金额 where 币种='港币' or 币种='HKD'

update tmp_单元交费通知单 set 汇率=外币.汇率 from 外币 where tmp_单元计费通知单.币种= 外币.币种

update tmp_单元交费通知单 set 人民币金额=港币金额/汇率 where 币种='港币' or 币种='HKD'

update tmp_单元交费通知单 set 人民币金额=应计金额 where 币种='人民币' or 币种='RMB'

update tmp_单元交费通知单 set 港币合计=ss.je from (select sum(未收金额) as je from tmp_交费通知单 where (币种='港币' or 币种='HKD') and 电脑名称=@pcname ) as ss
update tmp_单元交费通知单 set 人民币合计=ss.je from (select sum(未收金额) as je from tmp_交费通知单 where (币种='人民币' or 币种='RMB') and 电脑名称=@pcname ) as ss
...全文
49 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
rwq_ 2002-01-25
  • 打赏
  • 举报
回复
net_steven(吃素的狼),在SQL SERVER是可以ALTER !
你把NVARCHAR 改为VARCHAR试试看,
还有我提醒你一下,把中文字段名全改为英文,表名也一样,不然以后你就知道痛苦了!
net_steven 2002-01-25
  • 打赏
  • 举报
回复
alter table 是DDL语句,不可用于存储过程。

11,849

社区成员

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

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