我在PowerDesigner 16.5中拥有数据库的物理数据模型,我想生成SQL Server 2012 CREATE数据库脚本。 问题是当我生成这样的文件时,表的列名与“CODE”列中模型的定义相同,我希望它们与表的“NAME”列中的相同。
您是否知道如何强制PowerDesigner在生成前面提到的文件的过程中从“名称”而不是“代码”获取列名?
答案 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
。这样,所有未来的对象都会Code
与Name
匹配。
然而......我发现稍微约束一下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