Sql server SQL Server确定表列的物理大小

Sql server SQL Server确定表列的物理大小,sql-server,Sql Server,是否可以找出表中各个列的数据大小(以KB或MB为单位)?我有一个脚本,它告诉我每个表的物理大小,但我想知道数据库中的某些列占用了多少表的物理大小,特别是当我将XML存储在一列中时 非常感谢您的帮助 干杯您应该能够使用datalength函数,例如 select sum(datalength(yourfield)) from yourtable 这将汇总表中该字段的所有条目的数据长度-它不会考虑诸如可变长度字段指针之类的开销,空位图中的空格等。选择SUMDATALENGTHcolumnsA/10

是否可以找出表中各个列的数据大小(以KB或MB为单位)?我有一个脚本,它告诉我每个表的物理大小,但我想知道数据库中的某些列占用了多少表的物理大小,特别是当我将XML存储在一列中时

非常感谢您的帮助


干杯

您应该能够使用datalength函数,例如

select sum(datalength(yourfield))
from yourtable

这将汇总表中该字段的所有条目的数据长度-它不会考虑诸如可变长度字段指针之类的开销,空位图中的空格等。

选择SUMDATALENGTHcolumnsA/1024.0作为KB

这将返回特定数据库中的所有列及其数据大小,并且可以轻松更新,以仅返回特定表或列的数字

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
对于表中所有列的视图大小,您可以首先使用以下命令生成表的字段:

SELECT 'SUM(DATALENGTH('+Column_name+')) / (1024*1024) as '+Column_name+'_MB,'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '--TABLE_NAME--'
接下来,运行以下查询:

SELECT
    /*result previous query (with remove last comma)*/
FROM --TABLE_NAME--

据我所知,对不起。很少需要。对于其他人来说,您使用的是什么版本的SQL Server可能与此相关。应该注意的是,它返回的长度(以字节为单位)-我发现这对我的目的很有用。从表格中选择concatsumdatalengthyourfield/1024,“kb”