Я решил, что могу использовать 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, я получаю эти два сообщения об ошибке:
Сообщение 5058, уровень 16, состояние 2, строка 9
Параметр «AUTO_SHRINK» не может быть установлен в базе данных «master».
Сообщение 5058, уровень 16, состояние 1, строка 9
Параметр «AUTO_SHRINK» не может быть установлен в базе данных «tempdb».
Кажется, что в какой-то момент это нарушает работу, поэтому автоматическое сжатие отключено только для некоторых баз данных.
Любая идея, как я могу отключить автоматическое сжатие на всех базах данных? Бонусный вопрос: почему мой подход не работает?
источник
хотя на это есть ответ, я просто хотел бы убрать эту небольшую строчку кода, которая выполняет именно ту фильтрацию, которую хочет большинство людей, и устанавливает AUTO_SHRINK OFF:
источник