如何在PowerDesigner里面去掉统计信息

最新使用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,索引列表中是不是没有那些统计信息了?
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值