Sparx EA 文档生成关联t_package查询组件所属包报nvarchar转int错误
修复方案
根因说明
报错来自EA文档生成的SQL预处理逻辑:SQL Scratch Pad执行的是你提交的原生SQL,没有额外加工;但文档生成功能会自动根据模板绑定上下文、查询涉及的表,拼接隐式的过滤条件,一旦类型不匹配就会触发转换错误。
你新增t_package表后,EA默认识别到包表关联,会自动把当前上下文的包EA_GUID(nvarchar类型)作为参数,强制和t_package的int类型Package_ID做匹配,正好触发nvarchar转int的报错。
具体操作
- 替换t_package的别名
不用p、p1这类以p开头的别名,换成和EA默认规则无关的别名(比如pkg),同时把Note的别名改回之前正常运行的Note.Formatted,避免横杠引发的解析歧义,修改后的SQL如下:SELECT o1.Name as Component, pkg.Name as "Part.of", o1.Note as "Note.Formatted" from t_diagramobjects do1, t_diagram d1, t_object o1, t_package pkg where do1.diagram_id = d1.diagram_id and o1.Package_ID = pkg.Package_ID and do1.object_id = o1.object_id and d1.ea_guid = #DIAGRAMID# and o1.Object_type = 'Component' order by "Part.of" - 确认SQL片段绑定位置
确保这个SQL片段是绑定到模板的「图(Diagram)」元素下,而非「包(Package)」元素下:如果绑定在包上下文,EA会自动传入包GUID作为nvarchar参数,即使改了别名也可能触发隐式关联错误。 - 兼容性兜底写法
若上述修改后仍报错,可改成显式内连接的写法,彻底绕过EA的隐式表关联识别逻辑:SELECT o1.Name as Component, pkg.Name as "Part.of", o1.Note as "Note.Formatted" from ((t_diagramobjects do1 INNER JOIN t_diagram d1 ON do1.diagram_id = d1.diagram_id) INNER JOIN t_object o1 ON do1.object_id = o1.object_id) INNER JOIN t_package pkg ON o1.Package_ID = pkg.Package_ID where d1.ea_guid = #DIAGRAMID# and o1.Object_type = 'Component' order by pkg.Name
内容的提问来源于stack exchange,提问作者Tomas Svorc
相关产品推荐
相关产品推荐

