目录

第一步:数据库完整性检查

第二步:尝试检查修复数据库表

第三步:创建备份数据表

第四步:创建触发器

第五步:删除主键

第六步:删除重复主键元组

第七步: 查询删除数据情况

第八步:再次执行第二步,验证

第九步:数据导回

第十步:删除备份数据表

注意事项:在删除和插入数据时,保证系统没有触发器或关联表等情况的



第一步:数据库完整性检查

检查数据库完整性性,根据提示可以确认是那个数据表损坏,SQL脚本如下:

dbcc checkdb('数据库名称')

第二步:尝试检查修复数据库表

根据第一步检查结果确认修复数据库表,SQL脚本如下:

use '数据库名称'
declare @dbname varchar(255)
set @dbname='数据库名称'
exec sp_dboption @dbname,'single user','true'
dbcc checktable('待修数据表',REPAIR_ALLOW_DATA_LOSS)
dbcc checktable('待修数据表',REPAIR_REBUILD)
exec sp_dboption @dbname,'single user','false'

如果第二步后仍存在主键重复的问题,执行以下步骤

第三步:创建备份数据表

为待修数据表创建备份表,SQL脚本如下:

USE '数据库名称'
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].['备份表名称'](
--。。。。。。。。。。--与待修表字段完全一致,为避免主键重复,备份表不要建立主键
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO

第四步:创建触发器

为待修数据库创建出发器,使得在删除重复主键的元组时,能够备份到备份表中,SQL脚本如下:

USE '数据库名称'
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].['触发器名称'] ON [dbo].['待修数据表'] FOR Delete
AS
BEGIN  INSERT INTO '备份数据表' select * from deleted
END
GO

第五步:删除主键

删除待修数据表,为下一步删除重复主键元组做准备

ALTER TABLE '待修数据表' DROP PRIMARY KEY

第六步:删除重复主键元组

/*假设待修数据表为test
待修数据表主键字段包含
{a1  varchar(25)a2  Datetimea3  inta4  char(8)
}
*/
declare cur_test CURSOR FOR
select a1,a2,a3,a4 from test group by a1,a2,a3,a4having COUNT(*)>1 order by a1
OPEN cur_test
declare @ma1 varchar(25)
declare @ma2 Datetime
declare @ma3 int
declare @ma4 char(8)
fetch Next from cur_test into @ma1,@ma2,@ma3,@ma4
while @@FETCH_STATUS=0
begin
delete from test where a1=@ma1 and a2=@ma2 and a3=@ma3 and a4=@ma4
fetch Next from cur_test into @ma1,@ma2,@ma3,@ma4
end
close    cur_test
deallocate cur_test

第七步: 查询删除数据情况

Select * from '备份数据表'

第八步:再次执行第二步,验证

第九步:数据导回

根据具体情况,将备份表部分数据导入到修复好的数据表中

insert into '修复数据表' select distinct * from '备份数据表'

第十步:删除备份数据表

drop table '备份数据表'

注意事项:在删除和插入数据时,保证系统没有触发器或关联表等情况的

基于SQLSERVER--数据库表的修复相关推荐

  1. 一个sqlserver数据库表查看与备份软件

    一个sqlserver数据库表查看与备份软件 先连接:点击获取,列出全部数据库名:点击某个数据库名,列出全部表名:点击表名,获取内容:如果表的行数过多,万以上,获取时间会长: 点击 导出为excel ...

  2. sql+php修改mysql结构,MSSQL_修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库,具体不废话了,请看下文代码 - phpStudy...

    修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库 具体不废话了,请看下文代码详细说明吧. 向表中增加一个 varchar 列: ALTER TABLE distributors ...

  3. sqlserver 微信 读取_基于SQLServer数据库实现微信推送消息

    本文主要向大家介绍了基于SQLServer数据库实现微信推送消息,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 最近新上了一个项目,需要监控设备数据,增加一个报警功能. ...

  4. C#获取SQLServer数据库表名和字段名

    SQLServer数据库每个数据库都有INFORMATION_SCHEMA视图,数据库的结构信息Schema都在这里存储. select TABLE_NAME,TABLE_TYPE,TABLE_CAT ...

  5. 如何在sqlserver数据库表中建立复合主键

    主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说主键在一张表中的记录值是唯一的. 建立主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立 ...

  6. mysql数据库表损坏修复方法(适用虚拟主机)

    1.主机控制面板修复 在虚拟主机控制面板或独立控制面板中点击"数据库",用控制面板中提供的"修复数据库"功能,可以在线修复. 2.使用phpmyadmin进行修 ...

  7. mysql导入sqlserver数据库表

    原文:https://zhidao.baidu.com/question/1114325744502691499.html 在Navicat for MySQL 管理器中,创建目标数据库(注意:因为是 ...

  8. SQLServer数据库,表内存,实例名分析SQL语句

    --数据库内存分析 USE master go DECLARE @insSize TABLE(dbName sysname,checkTime VARCHAR(19),dbSize VARCHAR(5 ...

  9. 基于SqlServer基本表的插入、修改和删除

    实验二 SQL基本表的插入.修改和删除一.实验目的及要求: 熟练掌握基本表的插入.删除与修改,为后继学习作准备. 二.实验任务: 1.了解并掌握SQL Server Management Studio ...

  10. 恢复误删sqlserver数据库表中的数据

    想要恢复误删的数据需要满足以下条件: 1. 至少有一个误删除之前的数据库完全备份. 2. 数据库的恢复模式(Recovery mode)是"完全(Full)". 同时满足两个条件只 ...

最新文章

  1. python range函数与numpy arange函数,xrange与range的区别
  2. XMLHttpRequest cannot load解决方案
  3. DataInputStream
  4. poi excel文档生成与读取
  5. Android 多进程开发
  6. Win11系统没有声卡驱动怎么解决 Win11系统没有声卡驱动解决方法
  7. 在springBoot中使用Mapper类问题_@Mapper_@MapperScan_xml文件跟mapper分开_xml文件跟mapper在同一个目录下
  8. linux c++ sqlite_SQLite 真的很容易编译 | Linux 中国
  9. Datawhale编程学习之算法思想(7)
  10. Mac新手使用技巧,键盘键位分布和快捷键
  11. 速达服务器启动时显示对象名ACCSET无效
  12. ipad坏点测试软件,购买需谨慎 漏光坏点都要看_平板电脑评测-中关村在线
  13. 智慧交通综合管控解决方案
  14. mysql性能分析工具_MySQL性能分析、及调优工具使用详解
  15. the content must be served over HTTPS
  16. 《德鲁克管理思想精要》读书笔记6 - 企业家战略
  17. 生存分析统计方法选择,可以避免的一些坑
  18. android获取热点主机ip和连接热点手机ip
  19. java精品入门-0基础第一篇
  20. Vue-Vnode类型

热门文章

  1. Android Framework:深入探索 AIDL 数据流动
  2. Spark RDD distinct 算子
  3. canvas画七巧板
  4. winhex中判断+MBR+DBR+EBR方法
  5. 计算机组成原理课程设计报告书
  6. PYTHON实现将一个文件夹下的名字满足条件的图片拷贝复制到另一个文件夹路径
  7. 上海人设提示访问接口出错
  8. 苹果手机使用爱思助手安装ipa软件
  9. 垂直水平居中的方法总结和适用场景
  10. JavaScript 学习笔记(八)前后端交互;Ajax进行前后端交互