Sql 收缩数据库日志错误的简单过程

Sql 收缩数据库日志错误的简单过程,sql,sql-server,procedure,shrink,Sql,Sql Server,Procedure,Shrink,我写了一个压缩数据库日志的简单程序,只需输入数据库名称: ALTER proc [dbo].[sp_shrinkDBAndDBLog] @databaseName nvarchar(100) as begin declare @logName nvarchar(100), @dynamicSQL nvarchar(500) set @dynamicSQL='ALTER DA

我写了一个压缩数据库日志的简单程序,只需输入数据库名称:

ALTER proc [dbo].[sp_shrinkDBAndDBLog]
            @databaseName nvarchar(100)
        as
        begin

        declare @logName nvarchar(100),
                @dynamicSQL nvarchar(500)

        set @dynamicSQL='ALTER DATABASE '+@databaseName+' SET RECOVERY SIMPLE WITH NO_WAIT'     

        exec(@dynamicSQL)

        --select name from HLJEDI_SYS.sys.sysfiles where groupid=0;         

        set @dynamicSQL=N'select @logName= name from '+@databaseName+'.sys.database_files where type_desc=''LOG'''

        exec sp_executesql @dynamicSQL,N'@logName nvarchar(100) output',@logName output         

        --select * from sys.sysfiles where groupid=0                     

        set @dynamicSQL='DBCC SHRINKFILE (N'''+@logName+''',11,TRUNCATEONLY)'

        exec(@dynamicSQL)

        --DBCC SHRINKFILE (N'CUC_OA_LOG' , 11,  TRUNCATEONLY)           


        set @dynamicSQL='ALTER DATABASE '+@databaseName+' SET RECOVERY FULL WITH NO_WAIT'       

        exec(@dynamicSQL)
        --ALTER DATABASE OA SET RECOVERY FULL  --(Restore to Full Schema)       
    end
但当我执行以下命令时:

exec sp_shrinkDBAndDBLog 'DBName'
它有一个错误: sys.database_files找不到数据库“master”文件“eca2_log”。该文件已被删除且不存在


问题是什么?如果您告诉我并显示详细信息和原理,谢谢。

在执行DBCC SHRINKFILE命令之前,您可能缺少USE{database}命令,因此DBCC没有在正确的数据库上执行。

旁注:您不应该在存储过程中使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀!您可以显示修复问题的实际代码吗?该行必须插入到以下行的后面:set@dynamicSQL='DBCC SHRINKFILE(N''+@logName++',11,TRUNCATEONLY)'