Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
j2dna
Starting Member
11 Posts |
Posted - 2010-04-26 : 11:05:17
|
| Not sure if this is possible. I'm wanting to get stats on each database that is configured. I get a syntax error at the line use @db.declare @db as varchar(100);declare @dbid as int;declare @dbid_max as int;set @dbid = 1set @dbid_max = (select max(dbid) from master.dbo.sysdatabases)While @dbid <= @dbid_maxBEGINset @db = (select name from master.dbo.sysdatabases where dbid = @dbid)use @dbSELECT DB_NAME() AS DbName,name AS FileName,size/128.0 AS CurrentSizeMB, size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0 AS FreeSpaceMBFROM sys.database_files; set @dbid = @dbid + 1END |
|
|
DBA in the making
Aged Yak Warrior
638 Posts |
Posted - 2010-04-26 : 11:24:38
|
| You cant use USE with a variable like this. You can do it with dynamic SQL though.------------------------------------------------------------------------------------Any and all code contained within this post comes with a 100% money back guarantee. |
 |
|
|
Transact Charlie
Master Smack Fu Yak Hacker
3451 Posts |
Posted - 2010-04-26 : 11:35:49
|
try thisDECLARE @sql NVARCHAR(MAX)SELECT @sql = N''SELECT @Sql = @sql + 'SELECT ' + QUOTENAME([name], '''') + ' COLLATE DATABASE_DEFAULT AS [Database] , [name] COLLATE DATABASE_DEFAULT AS [FileName] , [size] /128.0 AS CurrentSizeMB , [size] / 128.0 - CAST(FILEPROPERTY(name, ''SpaceUsed'') AS INT) / 128.0 AS FreeSpaceMBFROM ' + QUOTENAME([name]) + '.sys.database_filesUNION'FROM sys.databasesSET @sql = LEFT(@sql, LEN(@sql) - 7)SELECT @sql = @sql + 'ORDER BY [database]'--PRINT @sqlEXEC sp_executeSql @sql Charlie===============================================================Msg 3903, Level 16, State 1, Line 1736The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION |
 |
|
|
j2dna
Starting Member
11 Posts |
Posted - 2010-04-26 : 12:08:16
|
quote: Originally posted by Transact Charlie try thisDECLARE @sql NVARCHAR(MAX)SELECT @sql = N''SELECT @Sql = @sql + 'SELECT ' + QUOTENAME([name], '''') + ' COLLATE DATABASE_DEFAULT AS [Database] , [name] COLLATE DATABASE_DEFAULT AS [FileName] , [size] /128.0 AS CurrentSizeMB , [size] / 128.0 - CAST(FILEPROPERTY(name, ''SpaceUsed'') AS INT) / 128.0 AS FreeSpaceMBFROM ' + QUOTENAME([name]) + '.sys.database_filesUNION'FROM sys.databasesSET @sql = LEFT(@sql, LEN(@sql) - 7)SELECT @sql = @sql + 'ORDER BY [database]'--PRINT @sqlEXEC sp_executeSql @sql Charlie===============================================================Msg 3903, Level 16, State 1, Line 1736The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION
That works....but I only get space used for the DB I have selected. |
 |
|
|
Transact Charlie
Master Smack Fu Yak Hacker
3451 Posts |
Posted - 2010-04-26 : 12:22:40
|
Hmmm.Ok -- go old skool thenIF OBJECT_ID('tempDb..#results') IS NOT NULL DROP TABLE #resultsCREATE TABLE #results ( [Database] VARCHAR(512) , [Filename] VARCHAR(512) , [CurrentSizeMB] DECIMAL(13,4) , [FreeSpaceMB] DECIMAL(13,4) )DECLARE @sql NVARCHAR(MAX)DECLARE @dbName VARCHAR(255)DECLARE dbCursor CURSOR LOCAL READ_ONLY FOR SELECT [name]FROM sys.databasesOPEN dbCursor FETCH NEXT FROM dbCursor INTO @dbNAme WHILE ( @@FETCH_STATUS = 0 ) BEGIN SET @sql = N' USE ' + QUOTENAME(@dbName) + ' INSERT INTO #results ( [Database] , [Filename] , [CurrentSizeMB] , [FreeSpaceMB] ) SELECT @dbNAme , [name] , [size] /128.0 AS CurrentSizeMB , [size] / 128.0 - CAST(FILEPROPERTY(name, ''SpaceUsed'') AS INT) / 128.0 AS FreeSpaceMB FROM sys.database_files' EXEC sp_ExecuteSql @sql , N'@dbName VARCHAR(255)' , @dbNAme FETCH NEXT FROM dbCursor INTO @dbName ENDCLOSE dbCursorDEALLOCATE dbCursorSELECT * FROM #resultsCharlie===============================================================Msg 3903, Level 16, State 1, Line 1736The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION |
 |
|
|
j2dna
Starting Member
11 Posts |
Posted - 2010-04-26 : 12:41:55
|
| Excellent!!!Thx... |
 |
|
|
|
|
|
|
|