PowerDesigner 16.5 - SQL Server CREATE数据库脚本中的列名称

时间:2016-05-06 19:07:21

标签: sql-server powerdesigner

我在PowerDesigner 16.5中拥有数据库的物理数据模型,我想生成SQL Server 2012 CREATE数据库脚本。 问题是当我生成这样的文件时,表的列名与“CODE”列中模型的定义相同,我希望它们与表的“NAME”列中的相同。

您是否知道如何强制PowerDesigner在生成前面提到的文件的过程中从“名称”而不是“代码”获取列名?

2 个答案:

答案 0 :(得分:0)

您可以在DBMS属性中更改SQL生成模式。在Database菜单中,应该有一个“Edit current DBMS ...”菜单项,它打开包含所有生成模式的对话框。

在那里,您可以找到包含列(列本身,表,引用,索引等)的所有代,并将“COLUMN”(或“COLNCODE”)替换为“COLNNAME”。

但请注意,发现所有这些地方可能需要花费不少时间。此外,我强烈建议首先备份数据库属性文件 - * .xdb - 因为它很容易破坏某些内容,并且整个数据库生成将被破坏。

答案 1 :(得分:0)

您可以更改Tools > Model Options > Naming Convention > Table > Code下的命名约定,将Character case设置为Mixed CASe,将Valid characters设置为All valid。这样,所有未来的对象都会CodeName匹配。

然而......我发现稍微约束一下SQL名称会更容易,以避免在任何地方引用它们;加上它迫使我对code / SQL名称三思而后行,这使得它们更加稳定:我避免在“负责员工”,“负责任员工”,“死人推销员”之间跳转,这会更新SQL名称;我满足于“RespEmpl”(假设所有的SQL名称必须有4或8个字符),并继续摆弄Name直到我厌倦了。

好的......在更改Model Options之后,我找不到再次应用现有对象的名称到代码转换的方法,所以这是一个执行此操作的脚本:

option explicit
   ' avoid endless loop in case of some mistake, adjust to model objects number
   ' set to -1 to disable
   const maxcount = 1000
   dim count : count = 0
   dim f : set f = ActiveModel
   descent f
sub descent(f)
   if maxcount > 0 and count > maxcount then exit sub
   output "... entering " & f.Name
   dim c
   for each c in f.Children
      count = count + 1
      if maxcount > 0 and count > maxcount then exit for
      if c.ClassKind = cls_Table then
         rename c
      elseif isKindOf(c.ClassKind, cls_BaseFolder) then
         descent c
      end if
   next
end sub
sub rename(o)
   dim n : n = o.Code
   o.setNameToCode
   if o.Code <> n then output "   " & o.ClassName & " " & o.Name & ", " & n & " => " & o.Code
end sub