求获取Enterprise Architect对象PropertyTypeName的等效SQL查询
等效SQL查询获取EA元素的PropertyTypeName
要实现和eaElement.PropertyTypeName相同的功能,你需要结合t_attributes和t_objects表来查询——因为PropertyTypeName并非直接存储在单一表字段中,而是分两种情况处理:
- 如果属性是自定义类型(比如模型内的类、枚举等),
PropertyTypeName对应该类型元素的名称,需要通过属性的Type字段(存储类型元素的GUID)关联t_objects表获取; - 如果属性是内置类型(比如
int、string),PropertyTypeName就是t_attributes表中Type字段的直接值。
示例SQL查询
假设你要获取指定对象(替换@ObjectID为目标元素的Object_ID)的所有属性及其PropertyTypeName:
SELECT -- 区分自定义类型和内置类型,返回对应的PropertyTypeName CASE WHEN a.Type LIKE '{%}' THEN o.Name ELSE a.Type END AS PropertyTypeName, a.Name AS PropertyName, a.Object_ID AS ParentObjectID FROM t_attributes a -- 左连接t_objects,处理自定义类型的关联 LEFT JOIN t_objects o ON a.Type = o.ea_guid -- 过滤目标元素的属性 WHERE a.Object_ID = @ObjectID;
为什么之前的查询没找到?
PropertyTypeName是EA API封装后的计算值,并非数据库中直接存在的字段。你之前查询的t_objectproperties存储的是元素的自定义属性,t_objects存储元素本身,t_attributes存储属性的基础信息,但单独查这些表都无法直接得到封装后的PropertyTypeName,必须通过关联组合来实现。
内容的提问来源于stack exchange,提问作者Niramin
相关产品推荐
相关产品推荐

