A resposta seguinte ( Execute `sp_spaceused` para todas as tabelas em todos os bancos de dados ) executa a solução para sp_spaceused
todas as tabelas em todos os bancos de dados.
Em vez disso, posso executá-lo apenas para todos os bancos de dados?
Consigo ver os resultados de todos os bancos de dados usando o script a seguir, mas, se possível, quero ver os resultados em uma única tabela do Excel, como a resposta vinculada:
DECLARE @DatabaseName NVARCHAR(255)
DECLARE @SqlQuery NVARCHAR(MAX)
-- Declare a cursor to loop through all databases
DECLARE database_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE state_desc = 'ONLINE' -- Filter out offline databases if needed
-- Open the cursor
OPEN database_cursor
-- Fetch the first database name from the cursor
FETCH NEXT FROM database_cursor INTO @DatabaseName
-- Start looping through all databases
WHILE @@FETCH_STATUS = 0
BEGIN
-- Build the dynamic SQL query to switch database context and execute the query
SET @SqlQuery = 'USE [' + @DatabaseName + ']; EXEC sp_spaceused @oneresultset = 1'
-- Execute the dynamic SQL query
EXEC sp_executesql @SqlQuery
-- Fetch the next database name from the cursor
FETCH NEXT FROM database_cursor INTO @DatabaseName
END
-- Close and deallocate the cursor
CLOSE database_cursor
DEALLOCATE database_cursor
Exemplo de saída de visualização do Excel, onde posso copiar facilmente todas as linhas e colá-las no arquivo Excel como um todo:
Você pode construir uma
UNION ALL
consulta dinâmica gigante usandosys.dm_db_partition_stats
, com agrupamento e executá-la.Se você quiser agregar também por banco de dados, você pode finalizar com:
Se você deseja agregar apenas por banco de dados, poderá simplificar significativamente:
Basta executar o procedimento. Por padrão, ele é executado apenas para o banco de dados ao qual você está conectado.
O exemplo na sua pergunta vinculada está usando o comando
sp_msforeachdb
para realizar tarefas mais complicadas de listar o espaço usado para cada banco de dados.