最新使用PowerDesigner对SQL Server 2000数据库作反向工程、以比较数据库和PDM的差异的时候,经常
会从数据库中Reverse出来一些名称以“_WA_Sys”开头的索引,这些索引并不是我们做数据库设计的时候
加的,而且从企业管理器中也看不到这些索引。
但是,使用“select * from sysindexes where name like '_WA_Sys%'”语句,直接查询sysindexes系
统表却能够查询出来。
后经查询相关技术文档得知,名称以“_WA_Sys”开头的索引,其实并不是真正的索引、也不具备索引的
功能,它是SQL Server查询优化器自动创建的统计信息(statistics)。
可是我们在PowerDesigner里面并不需要这些统计信息,如何才能使PD在Reverse的时候过滤掉这些统计呢
?
在PowerDesigner里面依次点击Tools-Resources-DBMS,打开“List of DBMS”窗口,从中选择Microsoft
SQL Server 2000,再点击窗口上方的第一个按钮“Property”,现在我们来编辑PD的Reverse行为——
从左侧的TreeView中依次展开Script\Objects\Index,点击SqlListQuery,在右面的Value大编辑框里我
们可以看到如下SQL语句:
{OWNER ID, TABLE ID, INDEX ID, CLUSTER ID, UNIQUE ID, CIDXLIST ...}
select
u.name,
o.name,
i.name,
case(i.status & 16) when 16 then 'clustered' else '' end,
case(i.status & 2) when 2 then 'unique' else '' end,
case(k.keyno) when 1 then '' else ', ' end + c.name + case (Indexkey_Property(k.id,
k.indid, k.keyno, 'IsDescending')) when 1 then ' desc' else ' asc' end
from
sysusers u
join sysobjects o on (o.uid = u.uid)
join sysindexes i on (i.id = o.id)
join sysindexkeys k on (k.id = i.id and k.indid = i.indid)
join syscolumns c on (c.id = k.id and c.colid = k.colid)
where i.indid between 1 and 254
[ and o.name = %.q:TABLE%]
[ and u.name = %.q:SCHEMA%]
order by
1, 2, 3, k.keyno
好的,看到了吗?在where i.indid between 1 and 254的下方加一句:
and i.name not like '%_WA_Sys%' --过滤掉SQL Server自动创建的统计信息
就OK了。
加完之后就是现在这个样子:
{OWNER ID, TABLE ID, INDEX ID, CLUSTER ID, UNIQUE ID, CIDXLIST ...}
select
u.name,
o.name,
i.name,
case(i.status & 16) when 16 then 'clustered' else '' end,
case(i.status & 2) when 2 then 'unique' else '' end,
case(k.keyno) when 1 then '' else ', ' end + c.name + case (Indexkey_Property(k.id,
k.indid, k.keyno, 'IsDescending')) when 1 then ' desc' else ' asc' end
from
sysusers u
join sysobjects o on (o.uid = u.uid)
join sysindexes i on (i.id = o.id)
join sysindexkeys k on (k.id = i.id and k.indid = i.indid)
join syscolumns c on (c.id = k.id and c.colid = k.colid)
where i.indid between 1 and 254
and i.name not like '%_WA_Sys%' --过滤掉SQL Server自动创建的统计信息
[ and o.name = %.q:TABLE%]
[ and u.name = %.q:SCHEMA%]
order by
1, 2, 3, k.keyno
好了,保存并关掉所有窗口,重新试试PD的Reverse,索引列表中是不是没有那些统计信息了?