基于SQLSERVER--数据库表的修复
目录
第一步:数据库完整性检查
第二步:尝试检查修复数据库表
第三步:创建备份数据表
第四步:创建触发器
第五步:删除主键
第六步:删除重复主键元组
第七步: 查询删除数据情况
第八步:再次执行第二步,验证
第九步:数据导回
第十步:删除备份数据表
注意事项:在删除和插入数据时,保证系统没有触发器或关联表等情况的
第一步:数据库完整性检查
检查数据库完整性性,根据提示可以确认是那个数据表损坏,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--数据库表的修复相关推荐
- 一个sqlserver数据库表查看与备份软件
一个sqlserver数据库表查看与备份软件 先连接:点击获取,列出全部数据库名:点击某个数据库名,列出全部表名:点击表名,获取内容:如果表的行数过多,万以上,获取时间会长: 点击 导出为excel ...
- sql+php修改mysql结构,MSSQL_修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库,具体不废话了,请看下文代码 - phpStudy...
修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库 具体不废话了,请看下文代码详细说明吧. 向表中增加一个 varchar 列: ALTER TABLE distributors ...
- sqlserver 微信 读取_基于SQLServer数据库实现微信推送消息
本文主要向大家介绍了基于SQLServer数据库实现微信推送消息,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 最近新上了一个项目,需要监控设备数据,增加一个报警功能. ...
- C#获取SQLServer数据库表名和字段名
SQLServer数据库每个数据库都有INFORMATION_SCHEMA视图,数据库的结构信息Schema都在这里存储. select TABLE_NAME,TABLE_TYPE,TABLE_CAT ...
- 如何在sqlserver数据库表中建立复合主键
主键是数据库表的一个重要属性,建立主键可以避免表中存在完全相同的记录,也就是说主键在一张表中的记录值是唯一的. 建立主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立 ...
- mysql数据库表损坏修复方法(适用虚拟主机)
1.主机控制面板修复 在虚拟主机控制面板或独立控制面板中点击"数据库",用控制面板中提供的"修复数据库"功能,可以在线修复. 2.使用phpmyadmin进行修 ...
- mysql导入sqlserver数据库表
原文:https://zhidao.baidu.com/question/1114325744502691499.html 在Navicat for MySQL 管理器中,创建目标数据库(注意:因为是 ...
- SQLServer数据库,表内存,实例名分析SQL语句
--数据库内存分析 USE master go DECLARE @insSize TABLE(dbName sysname,checkTime VARCHAR(19),dbSize VARCHAR(5 ...
- 基于SqlServer基本表的插入、修改和删除
实验二 SQL基本表的插入.修改和删除一.实验目的及要求: 熟练掌握基本表的插入.删除与修改,为后继学习作准备. 二.实验任务: 1.了解并掌握SQL Server Management Studio ...
- 恢复误删sqlserver数据库表中的数据
想要恢复误删的数据需要满足以下条件: 1. 至少有一个误删除之前的数据库完全备份. 2. 数据库的恢复模式(Recovery mode)是"完全(Full)". 同时满足两个条件只 ...
最新文章
- python range函数与numpy arange函数,xrange与range的区别
- XMLHttpRequest cannot load解决方案
- DataInputStream
- poi excel文档生成与读取
- Android 多进程开发
- Win11系统没有声卡驱动怎么解决 Win11系统没有声卡驱动解决方法
- 在springBoot中使用Mapper类问题_@Mapper_@MapperScan_xml文件跟mapper分开_xml文件跟mapper在同一个目录下
- linux c++ sqlite_SQLite 真的很容易编译 | Linux 中国
- Datawhale编程学习之算法思想(7)
- Mac新手使用技巧,键盘键位分布和快捷键
- 速达服务器启动时显示对象名ACCSET无效
- ipad坏点测试软件,购买需谨慎 漏光坏点都要看_平板电脑评测-中关村在线
- 智慧交通综合管控解决方案
- mysql性能分析工具_MySQL性能分析、及调优工具使用详解
- the content must be served over HTTPS
- 《德鲁克管理思想精要》读书笔记6 - 企业家战略
- 生存分析统计方法选择,可以避免的一些坑
- android获取热点主机ip和连接热点手机ip
- java精品入门-0基础第一篇
- Vue-Vnode类型