DECLARE @currentDB AS VARCHAR(100)
DECLARE @mrsdb_sqlscript AS NVARCHAR(500)
DECLARE db_cursor CURSOR FOR
SELECT name from sys.databases where state_desc <> 'offline' and name not in ('master', 'tempdb', 'model', 'msdb') order by name
DROP TABLE IF EXISTS #largestTables
CREATE TABLE #largestTables (
DatabaseName VARCHAR(100),
SchemaName VARCHAR(200),
TableName VARCHAR(200),
TotalRowCount INT
)
OPEN db_cursor
FETCH NEXT from db_cursor into @currentDB
WHILE @@FETCH_STATUS = 0
BEGIN
SET @mrsdb_sqlscript = N'INSERT INTO #largestTables
SELECT ''' + @currentDB + ''' , SCHEMA_NAME(schema_id) AS [SchemaName],
[Tables].name AS [TableName],
SUM([Partitions].[rows]) AS [TotalRowCount]
FROM ' + @currentDB + '.sys.tables AS [Tables]
JOIN ' + @currentDB + '.sys.partitions AS [Partitions]
ON [Tables].[object_id] = [Partitions].[object_id]
AND [Partitions].index_id IN ( 0, 1 )
GROUP BY SCHEMA_NAME(schema_id), [Tables].name';
PRINT 'Looking for largest table in the following DB: ' + @currentDB
exec sp_executesql @mrsdb_sqlscript
FETCH NEXT FROM db_cursor into @currentDB
END
CLOSE db_cursor
DEALLOCATE db_cursor
SELECT TOP 100 * FROM #largestTables
ORDER BY TotalRowCount DESC, Schemaname ASC
The SQL script above will use a temporary table variable and database cursor and loop through all databases, executing a SQL script that will insert data into a temporary table variable and after the cursor has looped through its dataset, the result in the temporary
table variable is presented to the DBA monitoring.
Use it to spot where you have much data in your databases of the data base server you are working with!
Tuesday, 30 April 2019
Finding databases with biggest tables in SQL Server
I created a T-SQL script today for use with SQL Server that will list the tables that have most rows for SQL Server, able to loop through all databases.
Subscribe to:
Comments (Atom)