我有这个查询迭代我的 SQL Server 上的所有数据库
DECLARE @DB_Name varchar(100)
DECLARE @Command nvarchar(200)
DECLARE database_cursor CURSOR FOR
SELECT name
FROM MASTER.sys.sysdatabases
where name not in ('master','tempdb','model','msdb')
OPEN database_cursor
FETCH NEXT FROM database_cursor INTO @DB_Name
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @Command = 'SELECT ' + '''' + @DB_Name + '''' + 'as DB_name, SF.filename, SF.size FROM sys.sysfiles SF'
EXEC sp_executesql @Command
FETCH NEXT FROM database_cursor INTO @DB_Name
END
CLOSE database_cursor
DEALLOCATE database_cursor
但是如何将结果全部存储在一个临时表中呢?
Dan Guzman 是对的(在他删除的评论中),您可以只使用
master.sys.master_files
,并且您当然应该避免像sysdatabases
和这样的旧视图,但是如果您需要使用不方便汇总到 master 中的sysfiles
数据来做类似的事情,你可以这样做:注意没有笨重的字符串连接,没有弄乱 16 个连续的单引号,如果数据库被命名,代码中会发生什么
oh'crap
?正是出于这个原因,我保留了这样的数据库:但是,您可以只更改您现在拥有的脚本来执行此操作:
您可能还对我编写的过程感兴趣
sp_foreachdb
,因为肯定有人会建议您使用sp_MSForEachDB
,它没有记录、不受支持且严重损坏。它也是 Brent Ozar 急救包的一部分。