Sp_MSforeachdbを使用してこの問題を解決できると考えていましたが、エラーメッセージが表示されます。
sp_MSforeachdb '
BEGIN
USE [?]
DECLARE @dbid INT
SET @dbid = DB_ID()
IF(@dbid > 4)
BEGIN
--PRINT ''[?]'' + CONVERT(VARCHAR, @dbid)
--ALTER DATABASE [?] SET AUTO_SHRINK OFF
END
END;
'
PRINT行のコメントを外して上記のクエリを実行すると、システムデータベースを除くすべてのデータベースのリストが表示されます。ただし、ALTER DATABASE行のコメントを外すと、次の2つのエラーメッセージが表示されます。
メッセージ5058、レベル16、状態2、行9
オプション「AUTO_SHRINK」はデータベース「マスター」に設定できません。
メッセージ5058、レベル16、状態1、行9
オプション「AUTO_SHRINK」はデータベース「tempdb」に設定できません。
これはある時点で操作を中断するようで、一部のデータベースのみが自動縮小を無効にします。
すべてのデータベースで自動縮小を無効にするにはどうすればよいですか?おまけの質問:なぜ私のアプローチが機能しないのですか?
残念ながら、プロシージャsp_MSforeachdbはサポートされておらず、今後もサポートされないため、信頼性が低いと言えます。
このDBを使用するときにデータベースをフィルターする方法を示す CodeProjectに関する記事 があります。しかし、私は私のローカル2008 R2インストールであなたと同じ問題を抱えています。フィルタリングが機能しません。
私たちの友人であるアーロンは、sp_MSforeachdbの異なるより良いバージョンを書くことについて、Nice記事を少し前に書いています。彼の記事 here を参照してください。 SPを使用すると、フィルタリングパラメータが必要な処理を実行します。