我想我可以使用 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' 中设置。
这似乎在某些时候中断了操作,因此只有一些数据库被禁用自动收缩。
知道如何在所有数据库上禁用自动收缩吗?额外的问题:为什么我的方法不起作用?
不幸的是,过程 sp_MSforeachdb 是并且将永远不受支持,因此有点不可靠。
CodeProject 上有一篇文章展示了如何在使用这个数据库时过滤数据库。但是在我的本地 2008 R2 安装中,我遇到了与您相同的问题。过滤不起作用。
我们自己的朋友 Aaron 前段时间写了一篇不错的文章,关于编写一个不同且更好的 sp_MSforeachdb 版本。在这里查看他的文章。使用该 SP,过滤参数将满足您的需求。
尽管这已得到回答,但我只是最好删除这行代码,该代码正是大多数人想要的过滤并将 AUTO_SHRINK 设置为 OFF: