数据库被系统自动置为质疑状态
解决:
sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。
注意 只有在该问题出现后,才可以使用 sp_resetstatus。否则,可能会损坏数据库。
由于该过程修改了系统表,系统管理员必须在创建这个过程前,启用系统表更新。要启用更新,使用下面的过程:
USE master
GO
sp_configure \'allow updates\', 1
GO
RECONFIGURE WITH OVERRIDE
GO
过程创建后,立即禁用系统表更新:
sp_configure \'allow updates\', 0
GO
RECONFIGURE WITH OVERRIDE
GO
只有系统管理员才能执行 sp_resetstatus。执行该过程后,立即重起SQL Server服务。
语法为:
sp_resetstatus database_name
下面的例子将关闭 m_c 数据库的置疑标志。
sp_resetstatus m_c
下面是结果集:
Database \'PRODUCTION\' status reset!
WARNING: You must reboot SQL Server prior to accessing this database!
数据库日志手动清除
解决:
backup log m_c with no_log
DBCC shrinkdatabase(m_c)
用数据库文件和日志文件恢复数据库
解决:
sp_attach_db m_csdn,\'d:\datebase\m_c.mdf\',\'d:\datebase\m_c_log.ldf\'
存储过程分页
create proc getpage
(@sqlstr nvarchar(4000), --查询字符串
@pagecount int=1, --第N页
@pagesize int=10) --每页行数
as
begin
set nocount on
declare @P1 int--P1是游标的id
set @pagecount=(@pagecount-1)*@pagesize+1
exec sp_cursoropen @P1 output,@sqlstr
exec sp_cursorfetch @P1,16,@pagecount,@pagesize
exec sp_cursorclose @P1
end
GO
在查询分析器里运行这个存储过程,会返回两个结果集,第一个是空记录,第二个是符合条件的按@pagesize 数量显示的记录。
按输入时间段生成每天的日期记录
---生成循环用的临时表
select top 366 id=identity(int,0,1) into #datetmp from syscolumns,sysobjects
delare @dt1 datetime
delare @dt2 datetime
set @dt1=\'2007-10-1\'
set @dt2=\'2007-10-31\'
select dateadd(day,id,@dt1) as everyday from #datetmp where dateadd(day,id,@dt1)<=@dt2
---删除临时表
drop table #datetmp