まず、私の英語で申し訳ありません。完璧ではないことは承知しています。
DB に約 40 列のテーブルがあり、レポートを作成するには、このテーブルのいくつかのレコードのサイズを取得する必要があります。
dbcc SHOWCONTIG で何かしようとしましたが、満足のいく結果が得られませんでした。
私の問題を解決するためのアドバイスやアイデアはありますか? 手伝ってくれてありがとう!
まず、私の英語で申し訳ありません。完璧ではないことは承知しています。
DB に約 40 列のテーブルがあり、レポートを作成するには、このテーブルのいくつかのレコードのサイズを取得する必要があります。
dbcc SHOWCONTIG で何かしようとしましたが、満足のいく結果が得られませんでした。
私の問題を解決するためのアドバイスやアイデアはありますか? 手伝ってくれてありがとう!
あなたのニーズを正確に理解しているかどうかはわかりませんが、DataLength
機能が役立つかもしれません:
select DataLength(ColumnOfInterest)
from TableName
where <filter condition>
一連の列の場合:
select DataLength(ColumnOfInterest1) + DataLength(ColumnOfInterest2) + etc.
from TableName
where <filter condition>
データ型の長さが必要であると仮定すると、INFORMATION_SCHEMA から選択してテーブルの構造を取得してみてください。
何かのようなもの
SELECT * FROM INFORMATION_SCHEMA.COLUMNS;
十分なはずです。列 CHARACTER_MAXIMUM_LENGTH は文字列の長さを示します。
SQL Server では、テーブルのサイズを簡単に取得できます。したがって、別のアプローチは、フィルター処理するレコードを別のテーブルに格納してから、テーブルのサイズを取得することです。
以下に例を示します。
--CREATE A TABLE TO STORE YOUR FILTERED RECORDS
CREATE TABLE dbo.resulttable
(
id INT,
employee VARCHAR(32)
)
GO
--INSERT FILTERED RECORDS IN NEW TABLE
INSERT INTO dbo.resulttable (id,employee)
SELECT id,employee FROM dbo.originaltable WHERE id > 100
GO
--GET SIZE OF TABLE WHICH HAS THE FILTERED RECORDS WITH HOWEVER MANY COLUMNS
SELECT
t.name AS TableName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.object_id = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME = 'resulttable'
GROUP BY
t.Name, p.Rows
ORDER BY
t.Name
GO