是否有可能找出表中各列的数据大小(KB或MB)?我有一个脚本告诉我每个表的物理大小,但我想知道数据库中的某些列占用了多少,特别是当我将XML存储在列中时.
任何帮助非常感谢
干杯
And*_*rew 24
您应该能够使用datalength函数,例如
select sum(datalength(yourfield))
from yourtable
Run Code Online (Sandbox Code Playgroud)
这将总结表中该字段的所有条目的数据长度 - 它不会考虑诸如可变长度字段指针,可空性位图中的空间等的开销.
这将返回特定数据库中的所有列及其数据大小,并且可以轻松更新为仅返回特定表或列的数字。
USE [YourDatabase]
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
CREATE TABLE #temp (tablename varchar(max), columnname varchar(max), sizeinkb float)
DECLARE MY_CURSOR Cursor LOCAL FAST_FORWARD
FOR SELECT table_name, column_name, table_schema FROM INFORMATION_SCHEMA.COLUMNS
Open My_Cursor
DECLARE @table varchar(max), @column varchar(max), @schema varchar(max)
Fetch NEXT FROM MY_Cursor INTO @table, @column, @schema
While (@@FETCH_STATUS <> -1)
BEGIN
DECLARE @sql varchar(1000) = 'INSERT #temp SELECT ''' + @schema + '.' + @table + ''', ''' + @column + ''', sum(isnull(datalength([' + @column + ']), 0)) / 1024.0 FROM [' + @schema + '].[' + @table + '] (NOLOCK)'
EXEC (@sql)
FETCH NEXT FROM MY_CURSOR INTO @table, @column, @schema
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
GO
SELECT *, sizeinkb / 1024.0 sizeinmb FROM #temp ORDER BY 3 DESC
Run Code Online (Sandbox Code Playgroud)
对于“表的所有列”的视图大小,您可以首先使用以下命令生成表的字段:
SELECT 'SUM(DATALENGTH('+Column_name+')) / (1024*1024) as '+Column_name+'_MB,'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '--TABLE_NAME--'
Run Code Online (Sandbox Code Playgroud)
接下来,运行此查询:
SELECT
/*result previous query (with remove last comma)*/
FROM --TABLE_NAME--
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13467 次 |
| 最近记录: |