这个存储过程咋修改呢?

whwzxl 2006-08-12 11:18:25
下面这个存储过程在保存检查语法都没问题,但当我在查询分析器中运行
exec sp_vippointmerge 'dserver','database1'(传递参数为服务器名和数据库)
这时会提示下列错误:
消息 137,级别 15,状态 2,第 3 行
Must declare the scalar variable "@vip_totalpoint".

但我确实已经定义了参数@vip_totalpoint了啊,哪位能帮忙看看?

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go



ALTER proc [dbo].[sp_vippointmerge]
@servername1 varchar(30),
@databasename1 varchar(30)

as
declare @table1 varchar(100)
declare @vip_scucode_scu varchar(30)
declare @vip_totalpoint float
declare @vip_couponpoint float
declare @vip_previouspoint float
declare @vip_previouscouponpoint float

begin

set nocount on;

set @table1=@servername1 + '.' + @databasename1 + '.dbo.vip_vip'

exec ('declare cur_vip_vip cursor for
select vip_scucode_scu,
sum(vip_totalpoint)-max(vip_previouspoint) as vip_totalpoint,
sum(vip_couponpoint)-max(vip_previouscouponpoint) as vip_couponpoint,
sum(vip_totalpoint)-max(vip_previouspoint) as vip_previouspoint,
sum(vip_couponpoint)-max(vip_previouscouponpoint) as vip_previouscouponpoint
from
(select vip_scucode_scu,vip_totalpoint,vip_couponpoint,vip_previouspoint,vip_previouscouponpoint
from ' + @table1 + '
where vip_totalpoint<>vip_previouspoint or vip_couponpoint<>vip_previouscouponpoint
union all
select vip_scucode_scu,vip_totalpoint,vip_couponpoint,vip_previouspoint,vip_previouscouponpoint
from vip_vip
where vip_totalpoint<>vip_previouspoint or vip_couponpoint<>vip_previouscouponpoint) a
group by a.vip_scucode_scu
order by a.vip_scucode_scu')

open cur_vip_vip
fetch next from cur_vip_vip into
@vip_scucode_scu,@vip_totalpoint,@vip_couponpoint,@vip_previouspoint,@vip_previouscouponpoint

while @@fetch_status=0
begin
begin tran
exec('update ' + @table1 + '
set
vip_totalpoint=@vip_totalpoint,
vip_couponpoint=@vip_couponpoint,
vip_previouspoint=@vip_previouspoint,
vip_previouscouponpoint=@vip_previouscouponpoint
where vip_scucode_scu=@vip_scucode_scu')

update vip_vip
set
vip_totalpoint=@vip_totalpoint,
vip_couponpoint=@vip_couponpoint,
vip_previouspoint=@vip_previouspoint,
vip_previouscouponpoint=@vip_previouscouponpoint
where vip_scucode_scu=@vip_scucode_scu

IF @@ERROR = 0
begin
commit
end
else
begin
rollback
end

fetch next from cur_vip_vip into
@vip_scucode_scu,@vip_totalpoint,@vip_couponpoint,@vip_previouspoint,@vip_previouscouponpoint

end

close cur_vip_vip
deallocate cur_vip_vip

end
...全文
181 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
whwzxl 2006-08-14
  • 打赏
  • 举报
回复
将 declare @vip_scucode_scu varchar(30)
declare @vip_totalpoint float
declare @vip_couponpoint float
declare @vip_previouspoint float
declare @vip_previouscouponpoint float
移到exec内,还是提示
消息 137,级别 15,状态 2,第 3 行
Must declare the scalar variable "@vip_totalpoint".
但已经定义了啊,如何解决?
zicxc 2006-08-12
  • 打赏
  • 举报
回复
这样改试试

ALTER proc [dbo].[sp_vippointmerge]
@servername1 varchar(30),
@databasename1 varchar(30)

as
declare @table1 varchar(100)

begin

set nocount on;

set @table1=@servername1 + '.' + @databasename1 + '.dbo.vip_vip'

exec ('

declare @vip_scucode_scu varchar(30)
declare @vip_totalpoint float
declare @vip_couponpoint float
declare @vip_previouspoint float
declare @vip_previouscouponpoint float

declare cur_vip_vip cursor for
select vip_scucode_scu,
sum(vip_totalpoint)-max(vip_previouspoint) as vip_totalpoint,
sum(vip_couponpoint)-max(vip_previouscouponpoint) as vip_couponpoint,
sum(vip_totalpoint)-max(vip_previouspoint) as vip_previouspoint,
sum(vip_couponpoint)-max(vip_previouscouponpoint) as vip_previouscouponpoint
from
(select vip_scucode_scu,vip_totalpoint,vip_couponpoint,vip_previouspoint,vip_previouscouponpoint
from ' + @table1 + '
where vip_totalpoint<>vip_previouspoint or vip_couponpoint<>vip_previouscouponpoint
union all
select vip_scucode_scu,vip_totalpoint,vip_couponpoint,vip_previouspoint,vip_previouscouponpoint
from vip_vip
where vip_totalpoint<>vip_previouspoint or vip_couponpoint<>vip_previouscouponpoint) a
group by a.vip_scucode_scu
order by a.vip_scucode_scu

open cur_vip_vip
fetch next from cur_vip_vip into
@vip_scucode_scu,@vip_totalpoint,@vip_couponpoint,@vip_previouspoint,@vip_previouscouponpoint

while @@fetch_status=0
begin
begin tran
update ' + @table1 + '
set
vip_totalpoint=@vip_totalpoint,
vip_couponpoint=@vip_couponpoint,
vip_previouspoint=@vip_previouspoint,
vip_previouscouponpoint=@vip_previouscouponpoint
where vip_scucode_scu=@vip_scucode_scu

update vip_vip
set
vip_totalpoint=@vip_totalpoint,
vip_couponpoint=@vip_couponpoint,
vip_previouspoint=@vip_previouspoint,
vip_previouscouponpoint=@vip_previouscouponpoint
where vip_scucode_scu=@vip_scucode_scu

IF @@ERROR = 0
begin
commit
end
else
begin
rollback
end

fetch next from cur_vip_vip into
@vip_scucode_scu,@vip_totalpoint,@vip_couponpoint,@vip_previouspoint,@vip_previouscouponpoint

end

close cur_vip_vip
deallocate cur_vip_vip

')
end
zicxc 2006-08-12
  • 打赏
  • 举报
回复
这么多变量都没定义
慧龙照片恢复软件是一个特殊的数据恢复工具,专门用于恢复误删除、格式化、文件系统错误、分区打不开等造成的照片文件丢失;支持硬盘、光盘、U盘、MP3、数码相机、手机、存储卡等存储介质。支持FAT、FAT32、NTFS、CDFS等各种分区格式,但不能恢复在NTFS分区中压缩存储的文件,也不能恢复加密的文件。全盘扫描查找照片数据,不放过任何一个可恢复的照片文件。   慧龙照片恢复软件在恢复文件过程中不会往源分区写入数据,因此可保证不会对源数据造成再次损害,可放心使用。软件还支持从磁盘映像文件中恢复照片文件,方便进行异地数据恢复,软件本身也具有制作磁盘映像文件的功能。   本软件目前仅支持恢复JPG格式的照片文件(更多文件格式正在增加中),JPG格式是最流行的数码照片文件格式,绝大多数数码相机及拍照手机均采用该格式存储照片,因此慧龙照片恢复软件能胜任绝大多数照片文件的恢复任务,照片恢复的成功率也很高。   慧龙照片恢复软件会提取照片文件中的拍照时间,作为恢复出来的文件修改时间,方便恢复后对照片进行整理。只要在文件夹里选择按“修改时间”排序,照片就是按拍照的先后顺序排列了,非常方便。   提示: 不要下载软件到要恢复数据的盘符里,也不要解压文件到要恢复的盘符里,否则可能再次破坏源数据。如果是相机直接连接电脑进行数据恢复,请保证电池电量足够,免得恢复过程中耗完电了,下次又要重新扫描。   为什么选择慧龙照片恢复软件?与其他数据恢复软件相比,慧龙照片恢复软件具有以下特点:   1. 逐一扫描存储扇区,寻找照片数据,提高照片文件恢复成功率;   2. 使用超简单,鼠标点击几下即可开始恢复;   3. 体积小,下载快,绿色软件,无需安装,不会在系统里留下任何垃圾;   4. 不依赖于文件系统,即使目录区、文件分配表完全损毁也能进行恢复;   5. 支持从映像文件恢复照片,因而可完全避免反复扫描对源数据造成损害;软件本身也包含制作映像文件的功能。

22,296

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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