Sql server 如何获取表中某些行的大小

Sql server 如何获取表中某些行的大小,sql-server,Sql Server,首先对不起我的英语,我知道它不完美 我在我的数据库中有一个表,我有大约40列,我需要得到这个表中一些记录的大小来生成一个报告 我试图用dbcc SHOWCONTIG做些什么,但没有得到令人满意的结果 你有什么建议/想法来解决我的问题吗? 谢谢你的帮助 假设需要数据类型长度,请尝试从信息模式中选择以获取表的结构 差不多 SELECT * FROM INFORMATION_SCHEMA.COLUMNS; 应该足够了。列字符\u最大\u长度为您提供字符串长度。我不确定是否完全理解您的需要,但可能是D

首先对不起我的英语,我知道它不完美

我在我的数据库中有一个表,我有大约40列,我需要得到这个表中一些记录的大小来生成一个报告

我试图用dbcc SHOWCONTIG做些什么,但没有得到令人满意的结果

你有什么建议/想法来解决我的问题吗?
谢谢你的帮助

假设需要数据类型长度,请尝试从信息模式中选择以获取表的结构

差不多

SELECT * FROM INFORMATION_SCHEMA.COLUMNS;

应该足够了。列字符\u最大\u长度为您提供字符串长度。

我不确定是否完全理解您的需要,但可能是
DataLength
函数将帮助您:

select DataLength(ColumnOfInterest)
from TableName
where <filter condition>
选择数据长度(感兴趣的列)
从表名
哪里
对于一组列:

select DataLength(ColumnOfInterest1) + DataLength(ColumnOfInterest2) + etc.
from TableName
where <filter condition>
选择DataLength(columnofinest1)+DataLength(columnofinest2)+等等。
从表名
哪里

建议编写一个查询,使用此处的参考信息根据内容进行计算:

例如,假设您的表有两列:一列是
varchar(20)
,另一列是
datetime
。那么您的查询将如下所示:

SELECT RowID, -- Some identifier for the row, e.g. primary key
       LEN(varcharcolumn) + 2 -- Length of varchar is L + 2 bytes
       + 8 -- Length of datetime column is 8 bytes
       ) AS TotalBytes
-- Add WHERE clause to restrict rows in report

在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

你是说存储要求吗?如果是这样的话,这可能会有所帮助:我需要找出
此表中的一组记录在磁盘上占用的字节数是多少
as@I-one say:)SQL Server的哪个版本?这里有一个2012年的链接可能会有所帮助:MicrosoftSQLServer2008b但在这个解决方案中,我认为,我需要获得每个数据库的数据长度column@zakir,要获取一组列的数据长度,它应该是
选择DataLength(Column1)+DataLength(Column2)+等等。
。但是,如果您需要回答此表中的一组记录在磁盘上占用的字节数是多少,那么此表中的一组记录在磁盘上占用的字节数不是答案。正如您所说,我需要知道此表中的一组记录在磁盘上占用的字节数是多少。:)@zakir,不幸的是,我没有解决方案,我需要现有记录的物理大小,所以我不知道这是否是一个好的解决方案,因为海报要求的是SQL Server解决方案;不是MySQL。有可能会修改查询以使其正常工作,但您应该给出一些如何操作的指导。@StuartAinsworth很好,我不知道为什么我认为它是MySQL。方法将类似于SQL-我已经更改了答案以反映这一点。但我有大约40列,如果这个查询是通用的,我希望它是通用的possible@zakir我同意,在这里有40列需要花费一些精力,但使用这种方法应该是可能的——我在一个数据库上的Oracle数据库中使用过类似的方法以前的项目。