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ではできんかったよ。