一、使用系統存儲過程
SQL Server提供了多個系統存儲過程,可以查詢數據庫中的各種信息。其中,sp_spaceused存儲過程可以返回指定表的空間使用情況,包括總空間、已用空間和剩餘空間。通過計算已用空間和總空間的比例,可以估算出相應表的數據量。
EXEC sp_spaceused 'tableName'
其中,tableName可以替換成需要查詢的表名。
但是,該方法僅僅是用來大致預估數據量,並且不包括索引和約束等元數據的空間佔用。
二、使用動態查詢
使用動態查詢是另一個快速查詢SQL Server所有表數據量的方法。通過查詢系統視圖sys.partitions獲取每張表的行數,並且過濾掉非用戶表。同時,系統存儲過程sp_tableofkeys可以查詢指定表名的主鍵信息,根據主鍵信息查詢每張表的記錄數。
DECLARE @tableName NVARCHAR(50)
DECLARE @sql NVARCHAR(MAX)
DECLARE table_cursor CURSOR FOR
SELECT name
FROM sys.tables
WHERE type = 'U'
OPEN table_cursor
FETCH NEXT FROM table_cursor INTO @tableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = '
SELECT ''' + @tableName + ''' AS TableName,
SUM(CASE WHEN index_id < 2 THEN row_count ELSE 0 END) AS Rows
FROM sys.partitions
WHERE OBJECT_NAME(object_id) = ''' + @tableName + ''''
EXEC sp_executesql @sql
FETCH NEXT FROM table_cursor INTO @tableName
END
CLOSE table_cursor
DEALLOCATE table_cursor 該方法可以準確計算每張表的記錄數,但是需要預先了解主鍵信息,且相對於其他方法速度可能較慢。
三、使用PowerShell腳本
PowerShell是用來管理和自動化Windows系統的強大工具。可以通過PowerShell來查詢SQL Server中所有表的數據量,並且像sys.partitions一樣查詢每張表的記錄數。
#引入SQL Server模塊
Import-Module sqlps -DisableNameChecking
#SQL Server登錄信息
$serverName = "localhost"
$databaseName = "databaseName"
$username = "username"
$password = "password"
#建立SQL Server連接
$connectionString = "Server=$serverName; Database=$databaseName; User ID=$username; Password=$password; Trusted_Connection=False;"
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
#查詢每張表的記錄數
$command = $connection.CreateCommand()
$command.CommandText = @"
SELECT
t.NAME AS TableName,
p.rows AS RowCounts
FROM
sys.tables t
INNER JOIN sys.partitions p ON t.object_id = p.OBJECT_ID
WHERE
t.is_ms_shipped = 0
AND p.index_id IN (1,0);
"@
$result = $command.ExecuteReader()
$table = New-Object System.Data.DataTable
$table.Load($result)
#輸出表的數據數量
$table | Format-Table -AutoSize
#關閉SQL Server連接
$connection.Close()
$connection.Dispose()使用PowerShell腳本可以快速地獲取所有表的數據量,並且可以靈活控制查詢SQL Server的方式。
原創文章,作者:CAZL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/134423.html
微信掃一掃
支付寶掃一掃