Even though I do not like the cursor, I don't think there could be another way since you are trying to do some dynamic SQL There. Here's a solution, I've tried it, you can add the fields you want from the sysfiles table in the table, and it will refresh everytime.
USE tempdb
GO
DECLARE getDBName CURSOR FOR
SELECT name
FROM sys.databases
OPEN getDBName
DECLARE @dbname VARCHAR(101)
DECLARE @dbsys VARCHAR(101)
DECLARE @SQL NVARCHAR(2000)
IF EXISTS (SELECT *
FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[DBGrowth]')
AND TYPE IN (N'U'))
DROP TABLE [dbo].[DBGrowth]
CREATE TABLE DBGrowth (
ServerName NVARCHAR(128),
DbName NVARCHAR(128),
NVARCHAR(128),
[MaxSize] NVARCHAR(128),
[growth] NVARCHAR(128),
DATE DATETIME)
FETCH NEXT FROM getDBName
INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
SET @dbsys = '['
+ @dbname
+ '].dbo.sysfiles'
SET @SQL = ('INSERT TEMPDB.dbo.DBGROWTH '
+ ' SELECT @@SERVERNAME, '''
+ @dbname
+ ''',size, maxsize, growth, getDate() '
+ ' FROM '
+ @DbSys)
PRINT @SQL
EXEC sp_executeSQL
@SQL
FETCH NEXT FROM getDBName
INTO @dbname
END
CLOSE getDBName
DEALLOCATE getDBName
SELECT *
FROM DBGrowth
Hope it helps,
Cheers,
J-F
Cheers,
J-F