SQLServerで、しきい値を決めてdatabaseを圧縮するTrasact-SQL。
DECLARE @UsedPerc int SET @UsedPerc = (SELECT ROUND(FILEPROPERTY(name, 'SpaceUsed')/convert(float, size)*100, 0) as UsedPerc FROM sys.database_files where type_desc = 'ROWS') IF @UsedPerc >= 80 BEGIN DECLARE @db_name sysname SET @db_name = (select db_name()) DBCC SHRINKDATABASE ( @db_name, 10) END
databaseの使用率を取得する部分で、sp_spaceusedプロシージャを利用できれば良かったのに、できんかった。sp_spaceusedが2つの結果セットを返してくるから、下みたいに書いてもエラーになってしまう。。。
DECLARE @table TABLE( [TableName] SYSNAME, [rows] BIGINT, [reserved] VARCHAR(25), [data] VARCHAR(25), [index_size] VARCHAR(25), [unused] VARCHAR(25) ) INSERT INTO @table EXEC sp_spaceused SELECT * FROM @table
最新のSQLServerでは結果セットを1つにしてくれるオプションがあるらしいけど、SQLServer2012ではできんかったよ。