DECLARE @name VARCHAR(25)--数据库名
DECLARE @SQL VARCHAR(1000)
DECLARE @logid INT
DECLARE sysdatabase_name CURSOR
FOR SELECT name FROM master.dbo.sysdatabases
OPEN sysdatabase_name
FETCH NEXT FROM sysdatabase_name INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
IF ( @name NOT IN ('xxx')) --不需要进行日志收缩的数据库名
BEGIN
SET @SQL =' --声明 DECLARE @logid INT
--使用数据库 USE ' + @name+'
--right函数:从字符串右边返回指定数目的字符
--rtrim函数:取消字符右边的空格
SELECT @logid = fileid FROM sysfiles WHERE RIGHT(rtrim(filename),3) = ''ldf''
--截断事务日志
BACKUP LOG ' + @name+' WITH NO_LOG
--收缩指定数据文件
DBCC SHRINKFILE (@logid) '
EXEC(@SQL)
END
FETCH NEXT FROM sysdatabase_name INTO @name
END
CLOSE sysdatabase_name
DEALLOCATE sysdatabase_name
删除数据或事务日志文件将从数据库删除该文件。仅当文件上不存在已有的数据或事务日志信息时才可能从数据库删除文件;文件必须完全为空后才能删除。若要将数据从一个数据文件迁移到同一文件组中的其它文件中,请使用 DBCC SHRINKFILE 语句,并指定 EMPTYFILE 子句。SQL Server 即不再允许将数据置于文件上,从而通过使用 ALTER DATABASE 语句或 SQL Server 企业管理器内的属性页,使之能够删除