SQL Server определяет физический размер столбцов таблицы

Можно ли узнать, насколько велики данные в КБ или МБ для отдельных столбцов в таблице? У меня есть script, который сообщает мне физический размер каждой таблицы, но я хотел бы знать, сколько из этого занимает некоторые столбцы в базе данных, особенно когда у меня есть XML, хранящийся в столбце.

Любая помощь очень ценится

Приветствия

Ответ 1

Вы должны иметь возможность использовать функцию datalength, что-то вроде

select sum(datalength(yourfield))
from yourtable

Это суммирует длины данных всех записей этого поля в таблице - на него не будут налагаться накладные расходы, такие как указатели полей переменной длины, пробел в растровой картине с нулевым значением и т.д.

Ответ 2

Выберите SUM (DATALENGTH (columnsA))/1024.0 AS KB

Ответ 3

Это вернет все столбцы в конкретной базе данных с их размером данных и может быть легко обновлено, чтобы возвращать только числа для определенной таблицы или столбца.

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 FROM INFORMATION_SCHEMA.COLUMNS

Open My_Cursor 
DECLARE @table varchar(max), @column varchar(max)
Fetch NEXT FROM MY_Cursor INTO @table, @column
While (@@FETCH_STATUS <> -1)
BEGIN
    DECLARE @sql varchar(1000) = 'INSERT #temp SELECT ''' + @table + ''', ''' + @column + ''', sum(datalength(' + @column + ')) / 1024.0 FROM ' + @table
    EXEC (@sql)

    FETCH NEXT FROM MY_CURSOR INTO @table, @column
END
CLOSE MY_CURSOR
DEALLOCATE MY_CURSOR
GO

SELECT * FROM #temp ORDER BY 3 DESC