--============================================= --first content --脚本说明:SQL数据库修复命令总集 --建立日期:2014-10-31 --编 写 者:lyfz-pc --版 本: (null) --============================================= /* 1.设置数据库为单用户*/ USE MASTER ALTER DATABASE [数据库名] SET SINGLE_USER -- 实例: use master alter database [lyfzdb] set single_user /* 2.设置数据库为多用户*/ USE MASTER ALTER DATABASE [数据库名] SET MULTI_USER -- 实例: use master alter database [lyfzdb] set multi_user /* 3.设置数据库为紧急模式 */ USE MASTER ALTER DATABASE 数据库名 SET EMERGENCY -- 实例: use master alter database lyfzdb set emergency /* 4.设置数据库为在线模式(紧急模式的相反模式) */ USE MASTER ALTER DATABASE 数据库名 SET ONLINE -- 实例: use master alter database lyfzdb set online /* 5.检测数据库完整性(是否损坏) */ USE MASTER DBCC CHECKDB('数据库名') -- 实例: use master dbcc checkdb('lyfzdb') /* 6.检测数据库指定表的一致性(表是否损坏)*/ USE 数据库名 DBCC CHECKTABLE('表名称') -- 实例: use lyfzdb dbcc checktable('dbo.dindan') /* 7.根据检测结果提示:***索引***,重建表索引 */ USE 数据库名 DBCC DBREINDEX('表名称',' ') -- 实例: use lyfzdb dbcc dbreindex('dindan',' ') /* 8.根据检测结果提示,修复分配错误,重建表索引 */ USE 数据库名 DBCC CHECKTABLE('表名称',REPAIR_REBUILD) -- 实例: use master alter database [lyfzdb] set single_user use lyfzdb dbcc checktable('dindan',repair_rebuild) use master alter database [lyfzdb] set multi_user /* 9.根据检测结果提示,快速修复表 */ USE 数据库名 DBCC CHECKTABLE('表名称',REPAIR_FAST) -- 实例: use master alter database [lyfzdb] set single_user use lyfzdb dbcc checktable('dindan',repair_fast) use master alter database [lyfzdb] set multi_user /* 10.根据检测结果提示,修复表一致性错误,并可能会导致一些数据丢失*/ USE 数据库名 DBCC CHECKTABLE('表名称',REPAIR_ALLOW_DATA_LOSS) -- 实例: use master alter database [lyfzdb] set single_user use lyfzdb dbcc checktable('dindan',repair_allow_data_loss) use master alter database [lyfzdb] set multi_user /* 12.根据检测结果提示,修复整个数据库一致性错误,并极有可能导致一些数据丢失 */ USE MASTER DBCC CHECKDB('数据库名',REPAIR_ALLOW_DATA_LOSS) -- 实例: use master alter database [lyfzdb] set single_user use master dbcc checkdb('lyfzdb',repair_allow_data_loss) use master dbcc checkdb('lyfzdb',repair_rebuild) use master alter database [lyfzdb] set multi_user /* 13.检测数据库是否发生了架构损坏,一般与第5条配合使用 */ USE MASTER DBCC CHECKCATALOG('数据库名') -- 实例: use master dbcc checkcatalog('lyfzdb') /* 14.修复置疑数据库*/ --.检测lyfzdb有无损坏 use master dbcc checkdb('lyfzdb') --有损坏则执行以下命名; use master alter database lyfzdb set emergency use master alter database [lyfzdb] set single_user use master dbcc checkdb('lyfzdb',repair_allow_data_loss) use master dbcc checkdb('lyfzdb',repair_rebuild) use master alter database [lyfzdb] set multi_user use master alter database lyfzdb set online --无损坏执行以下命名; --use master --go --sp_configure 'allow updates', 1 --reconfigure with override --go --begin tran --update sysdatabases set status = 32768 where name = 'lyfzdb' --commit tran --go --------------------------------------------------------------------- --============================================= /* 基础SQL语句 */ --建立日期:2014-10-31 --编 写 者:lyfz-pc --版 本: (null) --============================================= /* 1.查找表里重复的记录 */ USE 数据库名称 SELECT * FROM 表名称 WHERE 字段名称 IN (SELECT 字段名称 FROM 表名称 GROUP BY 字段名称 HAVING COUNT(字段名称) > 1) USE 数据库名称 SELECT * FROM 表名称 WHERE 字段名称 IN (SELECT 字段名称 FROM 表名称 WHERE 字段名称='查询内容' GROUP BY 字段名称 HAVING COUNT(字段名称) > 1) --实例: use db select * from dindanjd where id in (select id from dindanjd group by id having count(id) > 1) use db select * from dindanjd where id in (select id from dindanjd where id = '20140825-019' group by id having count(id) > 1) use dbmsg select max(signname)as signname,max(name)as name,max(addr)as addr from clientinfo group by signname /* 消除输出中的重复记录的命令 */ USE 数据库名称 SELECT DISTINCT * FROM 表名称 --实例: use db select distinct * from dindan --use db select unique id from dindan /* 删除表里指定条件的记录 */ USE 数据库名称 DELETE FROM 表名称 WHERE 列名称 = 值 --实例: use db delete from dindan where id='20141011-002' /* 更新指定表名、字段、字段内容,以及replace的结合使用*/ USE 数据库名称 UPDATE 表名称 SET 字段名称='要替换的内容' where 字段名称='要被替换的内容' USE 数据库名称 UPDATE 表名称 SET 字段名称=REPLACE(字段名称,'要被替换的内容' ,'要替换的内容') USE 数据库名称 UPDATE 表名称 SET 字段名称=REPLACE(CAST(字段名称 AS NVARCHAR(50)),'要被替换的内容' ,'要替换的内容') --实例 use db update dindansp set shuliang='6' where shuliang='6块' use db update dindansp set shuliang=replace(shuliang,'块','') use db update dindansp set shuliang=replace(cast(shuliang as nvarchar(50)),'6块','6') --修改数据库的逻辑文件名(数据) Alter DATABASE 数据库名 MODIFY FILE(NAME='老数据库逻辑文件名',NEWNAME='新数据库逻辑文件名') alter database [2014] modify file(name='dbnull',newname='2014') --修改数据库的逻辑文件名(日志) Alter DATABASE 数据库名 MODIFY FILE(NAME='老日志逻辑文件名',NEWNAME='新日志逻辑文件名') alter database [2014] modify file(name='dbnull_log',newname='2014_log') --在原来的值上加值更新 update [version] set msgbalance = convert(int,msgbalance,10)+1000