Pet*_*din 8 sql-server-2005 sql-server-2008 sql-server
我想我可以使用 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;
'
Run Code Online (Sandbox Code Playgroud)
如果我在未注释 PRINT 行的情况下运行上述查询,我将获得除系统数据库之外的所有数据库的列表。但是,当我取消注释 ALTER DATABASE 行时,我收到以下两条错误消息:
消息 5058,级别 16,状态 2,第 9 行
无法在数据库“master”中设置选项“AUTO_SHRINK”。
消息 5058,级别 16,状态 1,第 9 行
无法在数据库“tempdb”中设置选项“AUTO_SHRINK”。
这似乎在某些时候中断了操作,因此只有一些数据库被禁用自动收缩。
知道如何在所有数据库上禁用自动收缩吗?额外问题:为什么我的方法不起作用?
不幸的是,过程 sp_MSforeachdb 是并且将始终不受支持,因此有点不可靠。
CodeProject上有一篇文章展示了如何在使用此数据库时过滤数据库。但是我在本地 2008 R2 安装中遇到了与您相同的问题。过滤不起作用。
我们自己的朋友 Aaron 前段时间写了一篇很好的文章,关于编写 sp_MSforeachdb 的不同且更好的版本。在此处查看他的文章。使用该 SP,过滤参数将满足您的需求。