《让powerdesigner支持自动生成含sqlserver2000的表和列注释的脚本》由会员分享,可在线阅读,更多相关《让powerdesigner支持自动生成含sqlserver2000的表和列注释的脚本(8页珍藏版)》请在金锄头文库上搜索。
1、让让 PowerDesigner 支持自动生成含支持自动生成含 SQL Server 2000 的表和列注释的表和列注释的脚本的脚本Sybase 2008-11-26 12:50:27 阅读 25 评论 0 字号:大中小 订阅 PowerDesigner 是 Sybase 公司著名的产品,我从 16-bit 的 Windows 开始,就接触并使用这个工具,应该说是有很深的感情。PowerDesigner 是 DBA 和软件架构师设计的利器,随着版本的不断升级,PowerDesigner 提供了更多更强大的功能。仅以本篇为开始,向大家介绍一些 PowerDesinger 中的使用技巧,帮助大家更
2、好地更有效率地使用这个 CASE 工具。问题的提出问题的提出我曾经在很多网上看到有朋友问起,在 PowerDesigner 的 Physical Model design 中,除了 Oracle 外,选择其他数据库模型,最后生成建数据库脚本的时候,不会自动生成记录表和列注释信息的数据库脚本代码。请允许我先解释一下这个问题的概念,我们通过 PowerDesigner 设计 oracle 数据库,最后得到的脚本可以像下面这样,其中的 comment 语句就是我上面指出的在 oracle 中保存注释信息的脚本语句,在 oracle 中执行后,可以通过查询 oracle 的数据字典得到这些信息。这样做
3、的好处是,以后查看表结构比较方便,不需要从数据库文档资料中去寻找了,对于团队开发来说,有应用的意义。/*=*/* Table: EMP */*=*/create table EMP (“EmpID“ NUMBER,“EmpName“ VARCHAR2(50),SEX CHAR(1)/comment on table EMP is 职员信息/comment on column EMP.“EmpID“ is 职员编号/comment on column EMP.“EmpName“ is 职员姓名/comment on column EMP.SEX is 性别 F:女 M:男/SQL Server
4、也有这样的语句,但是,大家往往发现选择了数据库模型是 SQL Server,在自动生成建库脚本的时候,即使你选上了生成 comment 语句的选项,powerdesigner 也不会帮你自动生成,是 PowerDesigner 不支持 SQL Server 么,答案显然是否定的。问题的解决问题的解决PowerDesigner 这个工具可以支持任何一种关系型数据库的模型设计,因为,在PowerDesigner 中每一种数据库模型的特性定义都存储在一个 xdb 文件中,我们可以在PowerDesigner_Install_Home/Resource Files/DBMS 下可以找到。当然,我们也可
5、以自己创建一个新的 xdb,定义好我们想支持的数据库模型的特性。明白了这一点,这个问题的答案就显而易见。下面我就简单地说明一下,我使用的是 PowerDesinger9.5 企业版。Sybase 有些简化版本(如 SQL Moduler)就不能自定义 xdb,请大家注意。1 从菜单 TOOLS-RESOUCES-DBMS,进入自定义数据模型,参见图 1。图 12 PowerDesigner 弹出一个对话框,列表框中列出了当前 PowerDesigner 支持的数据库模型(图 2)。我们选择创建一个新的。输入名字 SQL SERVER 2000(EXTENDED),选择从现有的 SQL SERV
6、ER 2000 复制,这样 SQL SERVER 2000(EXTENDED)就包含了原来 SQL SERVER2000 模型拥有的所有特征(图 3)。图 2图 33 接下来,我们就需要为 SQL Server 2000(Extended)添加支持自动生成表和列注释代码的特性。PowerDesinger 把定义的特性用树状结构组织了起来(图 4),本篇要做的工作就是定义 Script 代码特征。我们需要修改 ScriptObjectsTableTableComment 和ScriptObjectsColumnColumnComment 中的脚本特征代码。4 SQL Server 2000 在数
7、据库中保存表和列注释是通过调用系统存储过程sp_addextendedproperty 来做的。那么我们只需要,分别写上表级的注释代码是:EXECUTE sp_addextendedproperty NMS_Description, N%COMMENT%, Nuser, N%OWNER%, Ntable, N%TABLE%, NULL, NULL列级的注释代码是EXECUTE sp_addextendedproperty NMS_Description, N%COMMENT%, Nuser, N%OWNER%, Ntable, N%TABLE%, Ncolumn, N%COLUMN%大家看看这
8、些代码,立刻就明白是怎么回事了(图 5)。%COMMENT%之类的就是相当于替换变量,PowerDesigner 在生成脚本的时候自动替换设计模型中替换变量的值。图 4图 55 保存 SQL Server 2000(Extended)成一个 xdb 文件。6 现在,我们可以创建一个新的 Physical Data Model 了,数据库模型选 SQL Server 2000(Extended)。建立一个表,需要提醒的是,一定要指定一个数据库使用者,一般用dbo(图 6)。我们可以为表和列都添加上注释。图 67 生成建库脚本,菜单 Databases-Generate Database。在图 7
9、 所示的对话框中,注意要选中 comment 选项。点击确定,就得到最终的建库脚本。打开看看,我们看到了PowerDesinger 根据我们告诉它的规则生成了对应的代码EXECUTE sp_addextendedproperty NMS_Description, N雇员信息, Nuser, Ndbo, Ntable, NEmployee, NULL, NULLgoEXECUTE sp_addextendedproperty NMS_Description, N主键 ID,自动增加, Nuser, Ndbo, Ntable, NEmployee, Ncolumn, NEmployeeIDgo.8
10、 我们在 SQL Server 2000 中执行这个角本,然后通过 EntERPrise Manager 可以看到这些注释。图 7图 8反向工程中对列级也生成注释同样操作上面的步骤在 Script-Object-Column 在 Column 下找到 SqlListQuery,在值中输入保存OWNER, TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY, DOMAIN, DEFAULT, COMMENT, ExtIdentityIncrement, ExtIdentitySeedselect u
11、.name, o.name, c.colid, c.name, case when (s.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 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小结小结通过这个实践,我们可以了解 PowerDesigner 是如何处理不同数据库的 SQL 语法差异的,这和我们开发应用中的参数文件的思路基本一致。同时,还需要注意的是首先要指定表的 owner 为 DBO,然后还要把当前 DBMS 的 script/objects/user 下的 create 和 drop 的值删除掉才可以。