前段时间我不得不想出一种方法来清理SQL Server 2005数据库中某些表的所有索引和用户创建的统计信息。经过几次尝试后,它可以工作,但现在我必须在SQL Server 2000数据库中工作。对于SQL Server 2005,我使用了
SELECT名称FROM sys.stats
WHERE object_id = object_id(@tableName)
AND auto_created = 0
获取用户创建的统计信息。但是,SQL 2000没有sys.stats表。我设法以可区别的方式从sysindexes表中获取索引和统计信息,但我无法弄清楚sys.stats.auto_created与SQL 2000的匹配是什么。任何指针?
顺便说一下:请使用T-SQL。
答案 0 :(得分:0)
您可以加入sysobjects
(基于id
列)并检查xtype
列的值:
C =检查约束
D =默认或默认约束
F =外键约束
L =日志
FN =标量函数
IF =内联表函数
P =存储过程
PK = PRIMARY KEY约束(类型为K)
RF =复制过滤器存储过程
S =系统表
TF =表函数
TR =触发器
U =用户表
UQ = UNIQUE约束(类型为K)
V =查看
X =扩展存储过程
(来自SQL Server 2000表格地图文档)
您需要以下内容:
SELECT SI.name FROM sysobjects AS SO, sysindexes AS SI
WHERE SO.id = SI.id
AND SO.xtype <> 'S'
答案 1 :(得分:0)
INDEXPROPERTY有一个“IsAutoStatistics”属性。我还记得统计信息也存储在sysindexes中,所以你可以从那里获取ID。
抱歉,我没有SQL 2000框来测试或确认...