存储过程中:前缀数目超过了最大值。最大值为 3的问题,让我想了一天多没见成功?
....连接数据库......
----把本地数据的发件信箱中的数据取到远程服务器上去进行正式邮件发送
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[proc_localSendEmail_Import_ebay]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[proc_localSendEmail_Import_ebay]
go
create procedure proc_localSendEmail_Import_ebay
as
begin
--本地邮件变量
declare @localMid bigint --本地MID
declare @ebusid varchar(30) --本地ebusid
declare @ebusiaccount varchar(200) --本地ebusiaccount
declare @clientID varchar(60) --clientid
declare @Userid varchar(60) --USERID(在ebay上的购买用户帐号)
declare @TransactionID varchar(100) --交易ID号码
declare @mailHost varchar(100) --邮件服务
declare @mailfrom varchar(200) --邮件发送人
declare @mailto varchar(200) --邮件接收人
declare @mailsubject varchar(2000) --邮件主题
declare @ptrval varbinary(16) --指针地址1
declare @p varbinary(16)
declare @Item_Number varchar(100) --Listing条目编号
declare @mailremark varchar(3000) --备注
declare @mailsing varchar(10) --标志 'A'为已标记 'B'为未标记
declare @mailsingdate datetime --标志日期
declare @SendStatus char(1) --发送是否成功 0.失败 1。成功 2.未发送
declare @OperNo varchar(30) --操作员编号
--远程邮件变量
declare @NewMid bigint --远程自动增长ID
declare @Newmailsenddate varchar(100) --发送时间
declare @NewSendStatus char(1) --发送状态
declare @NewSendErrMsg varchar(1000)--发送错误原因
--取本地发件信箱中的数据,从efuture_email取发件信箱中未发送的邮件到远程发服务上去
DECLARE ebay_sendEmail CURSOR FOR select Mid,eBusid,ebusiaccount,clientID,Userid,TransactionID,mailHost,mailfrom,mailto,mailsubject,Item_Number,mailremark,mailsing,mailsingdate,OperNo,SendStatus from Efuture_email where mailSort='2' and SendStatus='2';
--打开游标
OPEN ebay_sendEmail;
--执行游标
FETCH NEXT FROM ebay_sendEmail INTO @localMid,@ebusid,@ebusiaccount,@clientID,@Userid,@TransactionID,@mailHost,@mailfrom,@mailto,@mailsubject,@Item_Number,@mailremark,@mailsing,@mailsingdate,@OperNo,@SendStatus
--开始执行
IF (@@FETCH_STATUS = 0)
begin
WHILE (@@FETCH_STATUS = 0)
begin
--检查localMid在远程数据库中是否存在(提示远程的数据库)
select @Newmailsenddate=MailSenddate,@NewSendStatus=SendStatus,@NewSendErrMsg=SendErrMsg from ebay.ebay.dbo.ebay_Email where localMid=@localMid;
--如果存在的话,那么检查状态不等于失败的邮件并邮件的状态等信息更改过来
if(@@rowcount>0)
begin
--更改状态不等于失败的信息
Update efuture_email set Mailsenddate = @Newmailsenddate,SendStatus=@NewSendStatus,SendErrMsg=@NewSendErrMsg where Mid=@localMid and SendStatus='2';
end
--如果不存在的话,那就插入到远程的数据库中去进行正式发送
else
begin
--插入到远程数据库中去ebay_email中去
insert into ebay.ebay.dbo.ebay_Email
(
Mid,eBusid,ebusiaccount,clientID,Userid,TransactionID,
mailHost,mailfrom,mailto,mailsubject,Mailbody,Item_Number,mailremark,
mailsing,mailsingdate,OperNo,SendStatus
)
values
(
@localMid,@ebusid,@ebusiaccount,@clientID,@Userid,@TransactionID,
@mailHost,@mailfrom,@mailto,@mailsubject,'',@Item_Number,@mailremark,
@mailsing,@mailsingdate,@OperNo,@SendStatus
)
--更新Mailbody
set @NewMid=@@IDENTITY
--本地得到mailbody
select @ptrval = textptr(MailBody) from efuture_email where Mid= @localMid;
--从远程得到mailbody
select @p = textptr(MailBody) from ebay.ebay.dbo.ebay_Email where Mid= @NewMid;
--判断是否为空
if @p is not null
--更新,问题所在????
UpdateText ebay.ebay.dbo.ebay_Email.Mailbody @p 0 Null efuture_email.Mailbody @ptrval
end
--继续执行
FETCH NEXT FROM ebay_sendEmail INTO @localMid,@ebusid,@ebusiaccount,@clientID,@Userid,@TransactionID,@mailHost,@mailfrom,@mailto,@mailsubject,@Item_Number,@mailremark,@mailsing,@mailsingdate,@OperNo,@SendStatus
end
end
--关闭游标
CLOSE ebay_sendEmail;
--销毁游标
DEALLOCATE ebay_sendEmail;
end
问题就出现在:
UpdateText ebay.ebay.dbo.ebay_Email.Mailbody @p 0 Null efuture_email.Mailbody @ptrval
错误提示如下:
服务器: 消息 117,级别 15,状态 2,过程 proc_localSendEmail_Import_ebay,行 74
数字 名称 'ebay.ebay.dbo.ebay_Email' 包含的前缀数目超过了最大值。最大值为 3。
请问有哪位大哥能解决这个问题??
问题点数:20、回复次数:7Top
1 楼klan(因帅被判7年)回复于 2005-08-17 14:37:58 得分 0
server名.数据库名.dbo.表名
你后面又多了格mailbody是什么啊? 的确错了啊Top
2 楼filebat(Mark)回复于 2005-08-17 15:03:11 得分 0
我也想过这个问题,
不过还没碰到过。
关注一下。Top
3 楼love007(风中的风)回复于 2005-08-17 16:41:28 得分 0
高手请进.谢谢Top
4 楼purecoffee(清咖)回复于 2005-09-11 22:58:40 得分 0
同样的问题,关注。。。。。。Top
5 楼tigerjacky(林石--抢滩VC)回复于 2005-09-12 08:59:35 得分 0
关注
ebay.ebay.dbo.ebay_Email.Mailbody 是不是这个?最多只用到四层.这里用了五层?Top
6 楼lh1979(rocket)回复于 2005-09-12 11:45:07 得分 10
在远程机器上写存储过程,然后本地调用远程的存储过程就可以解决Top
7 楼rouqu(石林#黄果树)回复于 2005-09-12 15:45:05 得分 10
ebay.ebay.dbo.ebay_Email.Mailbody
| | | |
机器 数据库 表名 列名
名称 名称
换成 USE { database } 再试Top




