我有一个脚本可以提供有关数据库中表格的报告。
我的问题是如何获取有关最未经优化的列的数据?
实施例: 列名,reserveddata,useddata,unoptimised / unusedspace。
代码:
use tempdatabase
create table #getdatav1 (
[table] varchar(255),
[rows] int,
reserved varchar(255),
data varchar(255),
index_size varchar(255),
unused varchar(255))
create table #getdatav2 (
[servername] varchar(50),
[basename] varchar(50),
[table] varchar(255),
[rows] int,
reservedKb int,
dataKb int,
reservedIndexSize int,
reservedUnused int)
EXEC sp_MSforeachtable @command1="insert into #getdatav1
EXEC sp_spaceused '?'"
insert into #getdatav2 ([servername], [basename], [table], [rows], reservedKb, dataKb, reservedIndexSize, reservedUnused)
select @@SERVERNAME, DB_NAME(), [table], [rows],
SUBSTRING(reserved, 0, LEN(reserved)-2),
SUBSTRING(data, 0, LEN(data)-2),
SUBSTRING(index_size, 0, LEN(index_size)-2),
SUBSTRING(unused, 0, LEN(unused)-2)
from #getdatav1
select * from #getdatav2
order by reservedKb desc
答案 0 :(得分:0)
sp_spaceused
仅适用于表格的上下文,如果您正在寻找,则无法针对各个列运行。
您可以光标查看要检查的表中的每一列,并将每个列分别复制到临时表中,该表只包含该列,然后您可以运行sp_spaceused
以获取每列的结果。
检查here以获取存储过程的示例,该示例演示了将单个列复制到单独的表然后在其上运行sp_spaceused
的概念。您可以将此作为一个起点,然后创建光标以逐步浏览您希望分析的每个表和字段,调用您的sp_spaceused2
存储过程(尽管我建议您选择更好,更具描述性的名称)这个!)为每一个和INSERT
结果返回到一个表格进行最终显示。