
WHILE not exists(Select * from msdb.dbo.backupset where type = 'D' and database_name = db_name() and backup_finish_date >= (getdate()-1))
 and not exists(select * from msdb.dbo.restorehistory where restore_type='D' and destination_database_name = db_name() and restore_date >= (getdate()-1))
	raiserror('Создайте полную резервную копию базы данных!',11,1)
GO
--WHILE @@microsoftversion < 0x08000000
--	raiserror('Версия Microsoft SQL 7.0 не поддерживается! Используйте Microsoft SQL 2000.',11,1)
--GO
WHILE @@microsoftversion < 0x09000000
	raiserror('Версия Microsoft SQL ниже 2005 не поддерживается! Используйте Microsoft SQL 2005 и выше.',11,1)
GO
Declare @ver nvarchar(100)
SET @ver = convert(nvarchar(100), SERVERPROPERTY ('productlevel'))
WHILE left(convert(char(2), serverproperty('productversion')), 2)=N'8.' and (@ver=N'SP1' or @ver=N'SP2' or @ver=N'RTM') raiserror('Установите пакет обновления Service Pack 3 для SQL Server 2000!',11,1)
GO
--Проверка пользователя
WHILE exists(select * from sysusers where sid = suser_sid() and uid<>1)
	raiserror('Используйте учетную запись sa, либо иную, не зарегистрированную в базе данных.',11,1)
GO
WHILE IS_MEMBER('db_owner') = 0
	raiserror('Нет прав владельца базы данных!',11,1)
GO
--Проверка collation
WHILE DATABASEPROPERTYEX(N'tempdb', N'Collation')<>DATABASEPROPERTYEX(db_name(), N'Collation')
	OR (select count(*) 
		from (select collationid from syscolumns
			where collationid is not null and collationid <> 0 
				and objectProperty(id, 'IsUserTable')=1
			group by collationid
			having count(*) > 1) C) > 1
	raiserror('Неверное сопоставление(collation) базы данных.',11,1)
GO
--проверка целостности
DBCC CHECKDB WITH NO_INFOMSGS
GO

--Проверка на процессы
Declare processes cursor LOCAL STATIC READ_ONLY FOR
	select 'kill '+RTRIM(str(spid)) from master.dbo.sysprocesses where dbid = db_id() and spid <> @@SPID AND IS_SRVROLEMEMBER('sysadmin') = 1 AND CMD <> 'CHECKPOINT'
Declare @spid varchar(30), @num int
SET @num = 1000
Open processes
Fetch next from processes into @spid
WHILE @@FETCH_STATUS = 0 AND @num > 0
BEGIN
	EXECUTE(@spid)
	SET @num = @num - 1
	Fetch next from processes into @spid
END
Close processes
Deallocate processes
GO
IF IS_SRVROLEMEMBER('sysadmin') = 1
BEGIN
	WHILE exists(select * from master.dbo.sysprocesses where dbid = db_id() and spid <> @@SPID AND CMD <> 'CHECKPOINT')
		raiserror('Отключите от базы данных все прочие программы или дождитесь завершения обработки базы сервером',11,1)

	--Переход в режим "только администраторы"
	DECLARE @SQL VARCHAR(1000)
	IF LEFT(CONVERT(VARCHAR(100),SERVERPROPERTY(N'ProductVersion')),2) <> '11'
	BEGIN
		SET @SQL = '
		--Переход в режим "только администраторы"
		declare @dbName sysname
		SET @dbName = db_name()
		execute sp_dboption @dbname, ''dbo use only'', ''true''
		'
		EXECUTE (@SQL)
	END
	
END
GO
IF object_id('TABLES_RECORDS') is null
	CREATE TABLE TABLES_RECORDS (NAME sysname, RECORDS int)
DELETE FROM tables_records
exec sp_msforeachtable 'insert tables_records select ''?'',count(*) from ?'
GO
if object_id('dbo._v') is not null
	drop table dbo._v
select * into dbo._v from versions
GO
WHILE @@TRANCOUNT > 0
	raiserror('@@TRANCOUNT>0!!!',11,1)
GO
WHILE @@TRANCOUNT > 0
	raiserror('@@TRANCOUNT>0!!!',11,1)
GO
