如何通过SQL查询提取SysML值属性的默认初始值?
解决SysML值属性初始值获取问题
修改SQL查询关联t_xref表获取初始值
SysML值属性的初始(默认)值在EA数据库中通常存储在t_xref表,对应Type为PropertyDefault的条目,Client字段关联值属性的ea_guid。以下是修改后的查询,兼容你当前的筛选逻辑:
SELECT property.ea_guid AS CLASSGUID, property.Object_Type AS CLASSTYPE, property.Name, property.Note as [Notes], classifier.Name AS TYPE, -- 针对默认.qeax(Jet数据库)的初始值提取逻辑 CASE WHEN xref.Description LIKE '%<DefaultValue>%' THEN MID(xref.Description, INSTR(xref.Description, '<DefaultValue>') + 15, INSTR(xref.Description, '</DefaultValue>') - INSTR(xref.Description, '<DefaultValue>') - 15) ELSE xref.Description END AS [Default Value] FROM t_object property LEFT JOIN t_object classifier ON property.PDATA1 = classifier.ea_guid LEFT JOIN t_object block on property.ParentID = block.Object_ID -- 关联t_xref筛选初始值条目 LEFT JOIN t_xref xref ON property.ea_guid = xref.Client AND xref.Type = 'PropertyDefault' AND xref.Name = 'DefaultValue' WHERE block.Object_ID = #OBJECTID# AND property.Object_Type = 'Part' AND classifier.Object_Type = 'DataType' ORDER BY property.Name
迁移至Windows数据库(SQL Server)后的适配
如果切换到SQL Server,可改用XML解析逻辑提升可靠性:
SELECT property.ea_guid AS CLASSGUID, property.Object_Type AS CLASSTYPE, property.Name, property.Note as [Notes], classifier.Name AS TYPE, -- SQL Server下解析XML格式的初始值 CASE WHEN xref.Description IS NOT NULL THEN CAST(xref.Description AS XML).value('(DefaultValue)[1]', 'NVARCHAR(MAX)') ELSE NULL END AS [Default Value] FROM t_object property LEFT JOIN t_object classifier ON property.PDATA1 = classifier.ea_guid LEFT JOIN t_object block on property.ParentID = block.Object_ID LEFT JOIN t_xref xref ON property.ea_guid = xref.Client AND xref.Type = 'PropertyDefault' AND xref.Name = 'DefaultValue' WHERE block.Object_ID = #OBJECTID# AND property.Object_Type = 'Part' AND classifier.Object_Type = 'DataType' ORDER BY property.Name
模板内容选择器优化建议
如果之前用模板内容选择器无法筛选值属性,可尝试添加以下匹配条件:
- 匹配
ObjectType为Part - 匹配
Classifier.ObjectType为DataType - 直接使用上述修改后的SQL查询作为内容源,比选择器更灵活可控
内容的提问来源于stack exchange,提问作者Lisa Morgan
相关产品推荐
相关产品推荐

