修复SQL数据库MDF表出错--解决速达软件不能修复和不能备份帐套(图解)致远在“SQLServer无日志文件的恢复”中讲到:衡量数据恢复成功与否的标准:第一:能不能进行速达帐套的修复操作,第二:能不能进行速达帐套的备份操作,附合上述两个标准说明数据恢复成功。如不能修复或不能备份现象已出现,在修复或备份过程中系统会提示MDF“表出错”,该如何修复MDF“表出错”呢?下面将分步进行详细的介绍。对使用SQL数据库引擎的用友、金蝶等用户,如出现同类错误,同样能修复MDF“表出错”错误。运软件行环境:SQLSERVER2000SP4速达V5V3.90ERP试用版一:不能修复或不能备份出错提示。1:不能修复分两种:A:不能修复帐套,也不能备份帐套;B:不能修复帐套,但能备份帐套。下图1提示“帐套修复失败:修复S_SALEDETAIL表时出错。2:不能备份只有一种:既不能修复帐套,也不能备份帐套。这里示范用到的为不能修复帐套,也不能备份帐套这种。下图2提示“数据据库DBCC检查发现以下错误,不能备份。表错误:表“AA_BILLFLOW”,行的键缺少或无。从上面两张图中描述,可以发现数据库中的两张表出错:销售开单明细“S_SALEDETAIL”和底稿表“AA_BILLFLOW”。经过分析:发生表出错的主表为:销售开单明细“S_SALEDETAIL”;发生表出错的从表为:底稿表“AA_BILLFLOW”;发生表出错的辅表为:系统日志表“AM_SYSLOG”。第三张表修不修复对帐套修复和备份操作几乎没影响。为更彻底处理出错的表,致远把系统日志表“AM_SYSLOG”也列入要修复SQL数据表中。二:如何发现SQL数据库中出错的表。如何发现SQL数据库中出错的表,致远用底稿表“AA_BILLFLOW”、系统日志表“AM_SYSLOG”和销售开单明细“S_SALEDETAIL”3张表同时进行示范操作。用DTS导出,从速达软件“SD0001”数据库导出表到临时数据库“致远”的过程省略。方法可参阅我的博文Excel表如何导入SQL数据表中──速达软件操作示范_致远_acoffe_新浪博客http://blog.sina.com.cn/s/blog_610f242e0102v5ep.html这里只介绍从临时数据库“致远”导出到数据库“SD0001”的过程。利用临时数据库“致远”中未经修复的SQL表导出,如果发现表导出出错,系统会自动提示,“有X个表复制失败”。1:用DTS导出,首先创建临时数据库“致远”。致远习惯用:“致远”作临时数据库代号。只填临时数据库“致远”名称,其它均忽略。临时数据库中致远已导入底稿表“AA_BILLFLOW”、系统日志表“AM_SYSLOG”和销售开单明细“S_SALEDETAIL”3张表。2:选择“数据源”。“数据源”为临时数据库“致远”。3:选择“导出目的”。目的数据库为速达“SD31502_SD0001”。4:选择“从源数据库复制表”。5:选择“源表”。“源表”为“AA_BILLFLOW”、“AM_SYSLOG”和“S_SALEDETAIL”3张表。6:提示“有X个表复制失败”。这里实际提示“有3个表复制失败”。三:如何定位表出错的行所在位置。经过步骤“二”系统已提示DTS导出表“出错”,“有3个表复制失败”。1:现在你只要“双击错误行以获得对错误的详细描述”,提示“在目标的行号为X处出错”。提示表“AA_BILLFLOW”“在目的行号为3359处出错。不能在对象‘AA_BILLFLOW’中插入重复键。提示表“AM_SYSLOG”“在目的行号为4445处出错。不能在对象‘AM_SYSLOG’中插入重复键。提示表“S_SALEDETAIL”“在目的行号为3318处出错。不能在对象‘S_SALEDETAIL’中插入重复键。2:导出表“AA_BILLFLOW”,保存格式为EXCEL即可,找到“行号为3359”的行,记住图中红色部份:“BILLID”为“537”,“BILLCODE”为“XSD-2014-12-12-0014”。下面进行其它操作还要用到“BILLID”和“BILLCODE”。致远已同时导出3张表,见下图。系统日志表“AM_SYSLOG”和销售开单明细“S_SALEDETAIL”作同样操作,不再提示。四:利用临时数据库“致远”,对已找到的“”插入重复键的行进行修复。1:进入SQL“企业管理器”--临时数据库“致远”—“表”--“AA_BILLFLOW”,删除表“AA_BILLFLOW”中“BILLID”为“537”的整行。致远建议在SQL管理器中直接删除表“AA_BILLFLOW”中“BILLID”为“537”的整行。利用EXCEL表的目的只是为了找到表“AA_BILLFLO...