我寫一個簡單的程序來收縮數據庫日誌,只需要輸入數據庫名稱:的簡單程序來收縮數據庫日誌錯誤
ALTER proc [dbo].[sp_shrinkDBAndDBLog]
@databaseName nvarchar(100)
as
begin
declare @logName nvarchar(100),
@dynamicSQL nvarchar(500)
set @dynamicSQL='ALTER DATABASE '[email protected]+' 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 '[email protected]+'.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'''[email protected]+''',11,TRUNCATEONLY)'
exec(@dynamicSQL)
--DBCC SHRINKFILE (N'CUC_OA_LOG' , 11, TRUNCATEONLY)
set @dynamicSQL='ALTER DATABASE '[email protected]+' 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找不到數據庫'主'文件'eca2_log'。該文件已被刪除,不存在。
問題是什麼?謝謝你,如果你告訴我,並顯示細節和princeple。
備註:您應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! –