U852升级至U890时提示:升级失败! 高手给解决啊!
数据库名: UFDATA_001_1999D:\U8SOFT\Admin\SQLFILE850\Ufdata\DPRD_Public.sql
错误信息:
-2147217873
无法将 NULL 值插入列 'VT_ID',表 'UFDATA_001_1999.dbo.VoucherItems';该列不允许空值。UPDATE 失败。
执行如下语句时出错:
--升级所有的单据模版
if exists (select * from dbo.sysobjects where id = object_id(N'.') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
begin
declare @TblCount smallint
declare @TblName varchar(30)
declare @iNoOld_VT varchar(20)
declare @iNoNew_VT varchar(20)
set @TblName = 'InvoiceItem_SAl'
set @TblCount=1
while (@TblCount<=7)
begin
----升级显示格式模版
exec ('Insert Into VoucherItems(VT_ID,CardNum,CardItemNum,CardItemName,CanNotSelect,
ShowIt,LinkIt,LinkTbl,tablename,fieldname,fieldtype,
refertype,refertable,cardsection,cardformula1,
cardformula2,CanModify,MaxLength,MaxShowLen,NumPoint,
CanDelete,UserCheck,UserPrompt,FormatChar,IsMain,
NeedSum,CalcField,LinkField,AliasNum,isSelfdef,cox,coy,tabindex,Height,Width)
Select -10000,CardNum,CardItemNum,CardItemName,CanNotSelect,
ShowIt,LinkIt,LinkTbl,tablename,fieldname,fieldtype,
refertype,refertable,cardsection,cardformula1,
cardformula2,CanModify,MaxLength,MaxShowLen,NumPoint,
CanDelete,UserCheck,UserPrompt,FormatChar,IsMain,
NeedSum,CalcField,LinkField,AliasNum,isSelfdef,cox-datalength(CardItemName)*90,coy,tabidx,275,maxshowlen+datalength(CardItemName)*90
From ' + @TblName)
----升级打印格式模版
exec ('Insert Into VoucherItems_Prn(VT_ID,CardNum,CardItemNum,CardItemName,CanNotSelect,
ShowIt,LinkIt,LinkTbl,tablename,fieldname,fieldtype,
refertype,refertable,cardsection,cardformula1,
cardformula2,CanModify,MaxLength,MaxShowLen,NumPoint,
CanDelete,UserCheck,UserPrompt,FormatChar,IsMain,
NeedSum,CalcField,LinkField,AliasNum,isSelfdef,cox,coy,tabindex,Height,Width)
Select -10000,CardNum,CardItemNum,CardItemName,CanNotSelect,
ShowIt,LinkIt,LinkTbl,tablename,fieldname,fieldtype,
refertype,refertable,cardsection,cardformula1,
cardformula2,CanModify,MaxLength,MaxShowLen,NumPoint,
CanDelete,UserCheck,UserPrompt,FormatChar,IsMain,
NeedSum,CalcField,LinkField,AliasNum,isSelfdef,cox-datalength(CardItemName)*90,coy,tabidx,275,maxshowlen+datalength(CardItemName)*90
From ' + @TblName)
set @iNoNew_VT=1
declare Cur_VoucherTemplates cursor for SELECT CardNum
FROM VoucherItems where VT_ID=-10000
OPEN Cur_VoucherTemplates
FETCH next FROM Cur_VoucherTemplates INTO @iNoOld_VT
WHILE @@FETCH_STATUS = 0
BEGIN
set @iNoNew_VT=(select VT_ID From VoucherTemplates
Where VoucherTemplates.VT_CardNumber = @iNoOld_VT and
VoucherTemplates.VT_TemplateMode=0)
----更新显示模版
update VoucherItems Set VT_ID =@iNoNew_VT Where CardNum=@iNoOld_VT
update Vouchers Set DEF_ID =@iNoNew_VT Where CardNumber=@iNoOld_VT
----更新打印模版
set @iNoNew_VT=(select VT_ID From VoucherTemplates
Where VoucherTemplates.VT_CardNumber = @iNoOld_VT and
VoucherTemplates.VT_TemplateMode=1)
update VoucherItems_Prn Set VT_ID =@iNoNew_VT Where CardNum=@iNoOld_VT
update Vouchers Set DEF_ID_PRN =@iNoNew_VT Where CardNumber=@iNoOld_VT
FETCH NEXT FROM Cur_VoucherTemplates INTO @iNoOld_VT
end
CLOSE Cur_VoucherTemplates
DEALLOCATE Cur_VoucherTemplates
set @tblCount=@tblCount+1
if (@tblCount=2)
set @TblName = 'InvoiceItem_Ap'
else
if (@tblCount=3)
set @TblName = 'InvoiceItema'
else
if (@tblCount=4)
set @TblName = 'InvoiceItem_'
else
if (@tblCount=5)
set @TblName = 'KCHSItem'
else
if (@tblCount=6)
set @TblName = 'PO'
else
if (@tblCount=7)
set @TblName = 'PS'
exec ('delete ' + @TblName + ' where CardNum=' + '''01''')
end
----调整最大长度
update VoucherItems Set MaxLength =50 Where tablename='Bank' and fieldname='cBAccount'
update VoucherItems Set MaxLength =100 Where tablename='Bank' and fieldname='cBName'
update VoucherItems Set MaxLength =200 Where tablename='Customer' and fieldname='cCusOAddress'
update VoucherItems Set MaxLength =200 Where tablename='Customer' and fieldname='cCusAddress'
update VoucherItems Set MaxLength =100 Where tablename='Customer' and fieldname='cCusBank'
update VoucherItems Set MaxLength =100 Where tablename='Customer' and fieldname='cCusPhone'
update VoucherItems Set MaxLength =30 Where tablename='Inventory' and fieldname='cInvAddCode'
update VoucherItems Set MaxLength =60 Where tablename='Inventory' and fieldname='cInvStd'
update VoucherItems Set MaxLength =20 Where tablename='Person' and fieldname='cPersonName'
update VoucherItems Set MaxLength =200 Where tablename='Vendor' and fieldname='cVenIAddress'
update VoucherItems Set MaxLength =20 Where tablename='Vendor' and fieldname='cVenCode'
update VoucherItems Set MaxLength =200 Where tablename='Vendor' and fieldname='cVenAddress'
update VoucherItems Set MaxLength =100 Where tablename='Vendor' and fieldname='cVenBank'
update VoucherItems Set MaxLength =100 Where tablename='Vendor' and fieldname='cVenPhone'
update VoucherItems Set MaxLength =50 Where tablename='Vendor' and fieldname='cVenAccount'
update VoucherItems_Prn Set MaxLength =50 Where tablename='Bank' and fieldname='cBAccount'
update VoucherItems_Prn Set MaxLength =100 Where tablename='Bank' and fieldname='cBName'
update VoucherItems_Prn Set MaxLength =200 Where tablename='Customer' and fieldname='cCusOAddress'
update VoucherItems_Prn Set MaxLength =200 Where tablename='Customer' and fieldname='cCusAddress'
update VoucherItems_Prn Set MaxLength =100 Where tablename='Customer' and fieldname='cCusBank'
update VoucherItems_Prn Set MaxLength =100 Where tablename='Customer' and fieldname='cCusPhone'
update VoucherItems_Prn Set MaxLength =30 Where tablename='Inventory' and fieldname='cInvAddCode'
update VoucherItems_Prn Set MaxLength =60 Where tablename='Inventory' and fieldname='cInvStd'
update VoucherItems_Prn Set MaxLength =20 Where tablename='Person' and fieldname='cPersonName'
update VoucherItems_Prn Set MaxLength =200 Where tablename='Vendor' and fieldname='cVenIAddress'
update VoucherItems_Prn Set MaxLength =20 Where tablename='Vendor' and fieldname='cVenCode'
update VoucherItems_Prn Set MaxLength =200 Where tablename='Vendor' and fieldname='cVenAddress'
update VoucherItems_Prn Set MaxLength =100 Where tablename='Vendor' and fieldname='cVenBank'
update VoucherItems_Prn Set MaxLength =100 Where tablename='Vendor' and fieldname='cVenPhone'
update VoucherItems_Prn Set MaxLength =50 Where tablename='Vendor' and fieldname='cVenAccount'
----删除旧的格式表
drop table InvoiceItem_SAl
drop table InvoiceItem_Ap
drop table InvoiceItem_
drop table InvoiceItema
drop table KCHSItem
drop table Po
drop table Ps
drop table InvoiceItem_Prn
drop table InvoiceItem_SalPrn
drop table InvoiceItemaPrn
drop table KCHSItemPrn
drop table InvoiceItem
end
效率测试报告:开始升级UFDATA_001_1999数据库
Update_DelRepeat.sql,2010-3-18 9:52:39 -- 2010-3-18 9:52:39,0小时0分钟0秒。
DSTR_Public.SQL,2010-3-18 9:52:39 -- 2010-3-18 9:52:41,0小时0分钟2秒。
升级起始时间:2010-3-18 9:52:26,结束时间:2010-3-18 9:52:49,0小时0分钟23秒。 做为一个一般人,面对这个问题,只能说:看来还是得努力提升业务水平啊! 这个问题让sql高人去弄吧。 这个你用时间探测器跟踪下就出来了,然后用事件查询分析器来执行就好了亚 从错误的信息来看,在升级单据模板的时候出现了问题
要知道问题在哪个地方也很简单,你就把贴出来的语句分段执行,看看在哪里过不了就知道问题在哪里了 从错误的信息来看,在升级单据模板的时候出现了问题
要知道问题在哪个地方也很简单,你就把贴出来的语句分段执行,看看在哪里过不了就知道问题在哪里了
第一步执行:
--升级所有的单据模版
declare @TblCount smallint
declare @TblName varchar(30)
declare @iNoOld_VT varchar(20)
declare @iNoNew_VT varchar(20)
set @TblName = 'InvoiceItem_SAl'
set @TblCount=1
while (@TblCount<=7)
begin
----升级显示格式模版
exec ('Insert Into VoucherItems(VT_ID,CardNum,CardItemNum,CardItemName,CanNotSelect,
ShowIt,LinkIt,LinkTbl,tablename,fieldname,fieldtype,
refertype,refertable,cardsection,cardformula1,
cardformula2,CanModify,MaxLength,MaxShowLen,NumPoint,
CanDelete,UserCheck,UserPrompt,FormatChar,IsMain,
NeedSum,CalcField,LinkField,AliasNum,isSelfdef,cox,coy,tabindex,Height,Width)
Select -10000,CardNum,CardItemNum,CardItemName,CanNotSelect,
ShowIt,LinkIt,LinkTbl,tablename,fieldname,fieldtype,
refertype,refertable,cardsection,cardformula1,
cardformula2,CanModify,MaxLength,MaxShowLen,NumPoint,
CanDelete,UserCheck,UserPrompt,FormatChar,IsMain,
NeedSum,CalcField,LinkField,AliasNum,isSelfdef,cox-datalength(CardItemName)*90,coy,tabidx,275,maxshowlen+datalength(CardItemName)*90
From ' + @TblName)
----升级打印格式模版
exec ('Insert Into VoucherItems_Prn(VT_ID,CardNum,CardItemNum,CardItemName,CanNotSelect,
ShowIt,LinkIt,LinkTbl,tablename,fieldname,fieldtype,
refertype,refertable,cardsection,cardformula1,
cardformula2,CanModify,MaxLength,MaxShowLen,NumPoint,
CanDelete,UserCheck,UserPrompt,FormatChar,IsMain,
NeedSum,CalcField,LinkField,AliasNum,isSelfdef,cox,coy,tabindex,Height,Width)
Select -10000,CardNum,CardItemNum,CardItemName,CanNotSelect,
ShowIt,LinkIt,LinkTbl,tablename,fieldname,fieldtype,
refertype,refertable,cardsection,cardformula1,
cardformula2,CanModify,MaxLength,MaxShowLen,NumPoint,
CanDelete,UserCheck,UserPrompt,FormatChar,IsMain,
NeedSum,CalcField,LinkField,AliasNum,isSelfdef,cox-datalength(CardItemName)*90,coy,tabidx,275,maxshowlen+datalength(CardItemName)*90
From ' + @TblName)
如果通过了,再执行第二步:
set @iNoNew_VT=1
declare Cur_VoucherTemplates cursor for SELECT CardNum
FROM VoucherItems where VT_ID=-10000
OPEN Cur_VoucherTemplates
FETCH next FROM Cur_VoucherTemplates INTO @iNoOld_VT
WHILE @@FETCH_STATUS = 0
BEGIN
set @iNoNew_VT=(select VT_ID From VoucherTemplates
Where VoucherTemplates.VT_CardNumber = @iNoOld_VT and
VoucherTemplates.VT_TemplateMode=0)
----更新显示模版
update VoucherItems Set VT_ID =@iNoNew_VT Where CardNum=@iNoOld_VT
update Vouchers Set DEF_ID =@iNoNew_VT Where CardNumber=@iNoOld_VT
----更新打印模版
set @iNoNew_VT=(select VT_ID From VoucherTemplates
Where VoucherTemplates.VT_CardNumber = @iNoOld_VT and
VoucherTemplates.VT_TemplateMode=1)
update VoucherItems_Prn Set VT_ID =@iNoNew_VT Where CardNum=@iNoOld_VT
update Vouchers Set DEF_ID_PRN =@iNoNew_VT Where CardNumber=@iNoOld_VT
FETCH NEXT FROM Cur_VoucherTemplates INTO @iNoOld_VT
end
CLOSE Cur_VoucherTemplates
这两步都通过了应该是没有问题了,上面的语句没有对语法进行仔细检查,用的时候自己试一下 这个大单了, 你看看能不能看懂。
--1、无法将 NULL 值插入列 'VT_ID',表 'UFDATA_555_2007.dbo.VoucherItems';该列不允许空值。 INSERT 失败。
------------------------------------
insert into VoucherTemplates
(VT_ID,VT_Name,VT_CardNumber,VT_TemplateMode,VT_Width,VT_Height,VT_BodyTop,VT_BodyLeft,VT_BodyWidth,VT_BodyHeight,VT_SelfDef1,VT_SelfDef2,VT_SelfDef3,VT_Memo,VT_Lock,VT_TitleName,VT_TitleTop,VT_TitleLeft,VT_TitleFontState,VT_PageHeader,VT_BodyFixedCols,VT_BodyMaxRows,VT_GridStyle,VT_WorkAreaColor,VT_FiexdColor,VT_ControlStyle,VT_GridStyleHead,VT_GridStyleBody,VT_GridstyleTotal,VT_GridPrnRows,VT_GridPrnRowHeight,VT_Header,VT_Foot,VT_footHeaderFont,VT_PrintTemplID,VT_AutoCalc,VT_PageSubTotal,VT_PageTotal,VT_PrintGrid,nAutoCalcWidth,nPrintSeril,nPrintGridLine,varPrintSetting)
select
VT_ID,'' as VT_Name,VT_CardNumber,VT_TemplateMode,VT_Width,VT_Height,VT_BodyTop,VT_BodyLeft,VT_BodyWidth,VT_BodyHeight,VT_SelfDef1,VT_SelfDef2,VT_SelfDef3,VT_Memo,VT_Lock,VT_TitleName,VT_TitleTop,VT_TitleLeft,VT_TitleFontState,VT_PageHeader,VT_BodyFixedCols,VT_BodyMaxRows,VT_GridStyle,VT_WorkAreaColor,VT_FiexdColor,VT_ControlStyle,VT_GridStyleHead,VT_GridStyleBody,VT_GridstyleTotal,VT_GridPrnRows,VT_GridPrnRowHeight,VT_Header,VT_Foot,VT_footHeaderFont,VT_PrintTemplID,VT_AutoCalc,VT_PageSubTotal,VT_PageTotal,VT_PrintGrid,nAutoCalcWidth,nPrintSeril,nPrintGridLine,varPrintSetting from ufdata_001_2010..VoucherTemplates
WhereVT_ID not in (select VT_ID from VoucherTemplates)
--------------------------------------
--2、将 varchar 值 'IA01' 转换为数据类型为 int 的列时发生语法错误。
select * from AccInformation order by cid desc
可以看到 cid 有非数值
------------------------------
把AccInformation表中的cvalue ,cname,ccaption长度设成2倍长;
delete fromAccInformation where csysid in ('OM','SA','IA')
insert into AccInformation (csysid,cid,cname,ccaption,ctype,cvalue,cdefault,bvisible,benable)
select csysid,cid,cname,ccaption,ctype,cvalue,cdefault,bvisible,benable from ufdata_001_2010..AccInformation where csysid in ('OM','SA','IA')
--------------------------------
--3、违反了 PRIMARY KEY 约束 'PK_VT_ID'。不能在对象 'VoucherTemplates' 中插入重复键。
------------
delete from VoucherTemplates where VT_ID in ('20008','20009','20010','20012')
------------
--4、违反了 PRIMARY KEY 约束 'PK_VoucherPrefabricate'。不能在对象 'VoucherPrefabricate' 中插入重复键。
-----------------------
delete fromVoucherPrefabricate where CardNumber in ('QM01','QM02','QM03','QM04','QM05','QM06','QM07','QM08','QM09','QM10','QM11','QM12','QM13','QM14','QM15','QM16','QM17','QM18','QM19','QM20') andcContent = '手工输入'
-----------------------
--5、错误信息:
数据库名: UFDATA_555_2007
D:\U8SOFT\Admin\SQLFILE8610\Main\Ufdata\data\zh-CN\Data_Upda_PU_Query_CN.sql
错误信息:
-2147467259
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
执行如下语句时出错:
--
DECLARE @ID INT
DECLARE @TempIDS INT
SET @ID=(SELECT ID FROM rpt_glbdef_base WHERE Name='采购入库单列表过滤' and localeid='zh-CN')
SET @TempIDS= (SELECT TOP 1 MAX(Location)+1 FROM Rpt_fltDef_base WHERE ID=@ID and localeid='zh- CN')
IF NOT EXISTS(SELECT ID FROM Rpt_fltDef_base WHERE localeid='zh- CN' AND Name='copyrdlist.cWhCode' AND ID=@ID)
Insert into Rpt_fltDef_base (, ,,,, ,,,,,,, ,,,,, ) Values ( 'zh-CN',@TempIDS,@ID,'copyrdlist.cWhCode','仓库编码','5,仓库档案',2,2,0, Null,1,0,0,0,0,0,0,1 )
----------------
因找不到具体的原因,在不影响升级程序正常的情况下,可以在admin.rar文件中找到:Data_Upda_PU_Query_CN.sql文件,并找到如下语句:
SET @ID=(SELECT ID FROM rpt_glbdef_base WHERE Name='采购入库单列表过滤' and localeid='zh-CN')
改成:SET @ID=(SELECT top 1 ID FROM rpt_glbdef_base WHERE Name='采购入库单列表过滤' and localeid='zh-CN')
即增加了一个top 1 数据库名: UFDATA_001_1999
D:\U8SOFT\Admin\SQLFILE850\Ufdata\DPRD_Public.sql
你852数据有问题。这是在提升在升级850出错
升级有二个文件,还有个文件是如何写的。
还有升级不代表数据库有问题。
还有种情况就是文件数据库有问题。 这个只能一步步的慢慢看,是很麻烦,而且就算升级成功了也不表示以后就没有后遗症 根据我的经验.不要升级了.把数据导出来,然后装新的U890.在把数据导进去..你升级出的错误太多了,还未必成功.我以前从872到890升级还出了N多错误 看不懂,升级出问题真麻烦,棘手呀 我遇到过这个问题,提交集团,工程师回复,说是视图的问题,考到其他同事的电脑上升级就好了!感觉应该还是环境问题 来学习学习,请多多关照:):):)
页:
[1]