zoukankan      html  css  js  c++  java
  • 解决PowerDesigner 反向工程没有注释(备注)

    1. 列注释
    原来代码:
    {OWNER, TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY, DOMAIN, DEFAULT, ExtIdentitySeedInc, COMMENT, ExtCollation, ExtIdtNotForReplication, ExtDeftConstName, Sparse, FileStream, ExtRowGuidCol}
    select
        u.name,
        o.name,
        c.column_id,
        c.name,
        case when c.system_type_id in (165, 167, 231) and c.max_length = -1 then t.name + '(Max)' else t.name end,
        c.precision,
        case (c.max_length) when -1 then 0 else case when c.system_type_id in (99, 231, 239) then (c.max_length/2) else (c.max_length) end end as colnA,
        c.scale,
        case(c.is_computed) when 1 then convert(varchar(8000), (select z.definition from [%CATALOG%.]sys.computed_columns z where z.object_id = c.object_id and z.column_id = c.column_id)) else '' end as colnB,
        case(c.is_nullable) when 1 then 'NULL' else 'NOTNULL' end,
        case(c.is_identity) when 1 then 'identity' else '' end,
        case when(c.user_type_id <> c.system_type_id) then (select d.name from [%CATALOG%.]sys.types d where d.user_type_id = c.user_type_id) else '' end as colnC,
        convert(varchar(8000), d.definition),
        case (c.is_identity) when 1 then convert(varchar, i.seed_value) + ', ' + convert(varchar, i.increment_value) else '' end as colnD,
        (select convert(varchar(8000), value) from ::fn_listextendedproperty(NULL, 'user', u.name, 'table', o.name, 'column', c.name) where name = 'MS_Description') as colnE,
        c.collation_name,
        case (i.is_not_for_replication) when 1 then 'true' else 'false' end,
        d.name,
        case(c.is_sparse) when 1 then 'true' else 'false' end,
        case(c.is_filestream) when 1 then 'true' else 'false' end,
        case(c.is_rowguidcol) when 1 then 'true' else 'false' end
    from
        [%CATALOG%.]sys.columns      c
        join [%CATALOG%.]sys.objects o on (o.object_id = c.object_id)
        join [%CATALOG%.]sys.schemas u on (u.schema_id = o.schema_id)
        join [%CATALOG%.]sys.types   t on (t.user_type_id = c.system_type_id)
        left outer join [%CATALOG%.]sys.identity_columns i on (i.object_id = c.object_id and i.column_id = c.column_id)
        left outer join [%CATALOG%.]sys.default_constraints d on (d.object_id = c.default_object_id)
    where
       o.type in ('U', 'S', 'V')
    [  and u.name = %.q:OWNER%]
    [  and o.name=%.q:TABLE%]
    order by 1, 2, 3
    解决方案:      
    在PD的 tools-->resources-->dbms-->sql server 2008打开DBMS属性窗口,在general选项卡中选择Microsoft SQL Server 2008-->script-->objects-->column-->SQLlistquery修改其中的内容为:
    {OWNER, TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY, DOMAIN, DEFAULT, ExtIdentitySeedInc, COMMENT, ExtCollation, ExtIdtNotForReplication, ExtDeftConstName, Sparse, FileStream, ExtRowGuidCol}
    select
        u.name,
        o.name,
        c.column_id,
        c.name,
        case when c.system_type_id in (165, 167, 231) and c.max_length = -1 then t.name + '(Max)' else t.name end,
        c.precision,
        case (c.max_length) when -1 then 0 else case when c.system_type_id in (99, 231, 239) then (c.max_length/2) else (c.max_length) end end as colnA,
        c.scale,
        case(c.is_computed) when 1 then convert(varchar(8000), (select z.definition from [%CATALOG%.]sys.computed_columns z where z.object_id = c.object_id and z.column_id = c.column_id)) else '' end as colnB,
        case(c.is_nullable) when 1 then 'NULL' else 'NOTNULL' end,
        case(c.is_identity) when 1 then 'identity' else '' end,
        case when(c.user_type_id <> c.system_type_id) then (select d.name from [%CATALOG%.]sys.types d where d.user_type_id = c.user_type_id) else '' end as colnC,
        convert(varchar(8000), d.definition),
        case (c.is_identity) when 1 then convert(varchar, i.seed_value) + ', ' + convert(varchar, i.increment_value) else '' end as colnD,
        convert(varchar(8000),e.value),
        c.collation_name,
        case (i.is_not_for_replication) when 1 then 'true' else 'false' end,
        d.name,
        case(c.is_sparse) when 1 then 'true' else 'false' end,
        case(c.is_filestream) when 1 then 'true' else 'false' end,
        case(c.is_rowguidcol) when 1 then 'true' else 'false' end
    from
        [%CATALOG%.]sys.columns      c
        join [%CATALOG%.]sys.objects o on (o.object_id = c.object_id)
        join [%CATALOG%.]sys.schemas u on (u.schema_id = o.schema_id)
        join [%CATALOG%.]sys.types   t on (t.user_type_id = c.system_type_id)
        left outer join [%CATALOG%.]sys.identity_columns i on (i.object_id = c.object_id and i.column_id = c.column_id)
        left outer join [%CATALOG%.]sys.default_constraints d on (d.object_id = c.default_object_id)
        left outer join [%CATALOG%.]sys.extended_properties e on (e.class=u.schema_id and e.major_id=o.object_id and e.minor_id = c.column_id and e.name=N'MS_Description')
    where
       o.type in ('U', 'S', 'V')
    [  and u.name = %.q:OWNER%]
    [  and o.name=%.q:TABLE%]
    order by 1, 2, 3


    2. 表注释
    原为:
    {OWNER, TABLE, TABLE_TYPE, COMMENT}
    select
       u.name,
       o.name,
       case (o.type) when 'S' then 'SYSTEM TABLE' else 'TABLE' end,
       (select convert(varchar(8000), value) from ::fn_listextendedproperty(NULL, 'user', u.name, 'table', o.name, null, null) where name = 'MS_Description') as coln
    from
       [%CATALOG%.]sys.sysobjects o
       join [%CATALOG%.]sys.schemas  u on (u.schema_id = o.uid)
    where
       o.type in ('U', 'S')
    [  and u.name = %.q:OWNER%]
    order by 1, 2
    解决办法:
    在PD的 tools-->resources-->dbms-->sql server 2008打开DBMS属性窗口,在general选项卡中选择Microsoft SQL Server 2008-->script-->objects-->Table-->SQLlistquery修改其中的内容为:
    {OWNER, TABLE, TABLE_TYPE, COMMENT}
    select
       u.name,
       o.name,
       case (o.type) when 'S' then 'SYSTEM TABLE' else 'TABLE' end
       ,convert(varchar(8000), e.value) as coln
    from
       [%CATALOG%.]sys.sysobjects o
       join [%CATALOG%.]sys.schemas  u on (u.schema_id = o.uid)
       left join [%CATALOG%.]sys.extended_properties e on (e.class=u.schema_id and e.major_id=o.id and e.minor_id=0 and e.name=N'MS_Description')
    where
       o.type in ('U', 'S')
    [  and u.name = %.q:OWNER%]
    order by 1, 2
    3. 反向工程后,在Users中删除dbo用户,然后生成脚本即可运行。

    图文操作:

    1、修改反转过来的字段

    PowerDesigner从数据库反转的时候,默认不带注释,需要先进行修改。

    输入如下脚本:

    {OWNER, TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY, DOMAIN, DEFAULT, COMMENT, ExtIdentityIncrement, ExtIdentitySeed}

    select

    u.name,

    o.name,

    c.colid,

    c.name,

    case when (s.usertype < 100) then s.name else x.name end,

    c.prec,

    c.length,

    c.scale,

    z.text ,

    case (c.status & 8) when 8 then 'NULL' else 'NOTNULL' end,

    case (c.status & 128) when 128 then 'identity' else '' end,

    case when (s.usertype < 100) then '' else s.name end,

    v.text,

    CONVERT(varchar, ISNULL(p.[value], '')) AS text,

    case (c.status & 128) when 128 then ident_incr(u.name + '.' + o.name) else null end,

    case (c.status & 128) when 128 then ident_seed(u.name + '.' + o.name) else null end

    from

    dbo.sysusers u

    join dbo.sysobjects o on (o.uid = u.uid and o.type in ('U', 'S', 'V'))

    join dbo.syscolumns c on (c.id = o.id)

    left outer join sys.extended_properties p on c.id = p.major_id and c.colid = p.minor_id

    left outer join dbo.systypes s on (c.usertype = s.usertype and s.xtype = c.xtype and c.usertype >= 0)

    left outer join dbo.systypes x on (s.usertype > 100 and s.xtype = x.xtype and x.usertype not in (0, 18, 80) and x.usertype < 100)

    left outer join dbo.syscomments z on (z.id = o.id and z.number = c.colid)

    left outer join dbo.sysobjects d on (d.id = c.cdefault and d.category <> 0)

    left outer join dbo.syscomments v on (v.id = d.id)

    where 1 = 1

    [ and u.name = %.q:OWNER%]

    [ and o.name=%.q:TABLE%]

    order by 1, 2, 3

    2、配置PowerDesigner数据库连接

    下一步,点击“完成”——“测试数据库”——返回OK。

    3、新建物理数据模型

    点击“OK”后,将会开始进行反转PD字典工作。

    PowerDesigner设计时表显示注释选项: 选定编辑的表,右键- >Properties- >Columns- >Customize Columns and Filter(或直接用快捷键Ctrl+U)- >Comment(前面打勾)- >OK

    如果出现错误“[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。 SQLSTATE = 37000”

    解决办法:选择菜单栏中的Database -> Change Current DBMS ,给DBMS选择SQL Server2005。

    引用: http://www.cnblogs.com/zhangxb/archive/2012/04/20/2458898.html

    具体操作:   https://www.cnblogs.com/jiekzou/p/5721522.html
  • 相关阅读:
    LeetCode Find Duplicate File in System
    LeetCode 681. Next Closest Time
    LeetCode 678. Valid Parenthesis String
    LeetCode 616. Add Bold Tag in String
    LeetCode 639. Decode Ways II
    LeetCode 536. Construct Binary Tree from String
    LeetCode 539. Minimum Time Difference
    LeetCode 635. Design Log Storage System
    LeetCode Split Concatenated Strings
    LeetCode 696. Count Binary Substrings
  • 原文地址:https://www.cnblogs.com/chencidi/p/8422372.html
Copyright © 2011-2022 走看看