Oracle迁移至SQL Server时如何替换dbms_xmlgen.getxml(select query)语法
Oracle DBMS_XMLGEN.GETXML 语法迁移至 SQL Server 的改写方案
Oracle 中 dbms_xmlgen.getxml(SELECT 查询语句) 的作用是将指定查询的结果集转换为 XML 格式的内容返回,SQL Server 可通过 FOR XML 子句实现完全等效的功能。
基础改写示例
原 Oracle 写法参考
SELECT dbms_xmlgen.getxml('SELECT employee_id, first_name, salary FROM employees WHERE department_id = 10') AS emp_xml FROM dual;
等效 SQL Server 写法
1. 返回 XML 类型(推荐,性能最优)
如果需要和原逻辑一致返回结构化XML,使用以下写法:
SELECT ( SELECT employee_id, first_name, salary FROM employees WHERE department_id = 10 FOR XML RAW('ROW'), ROOT('ROWSET'), TYPE ) AS emp_xml
参数说明:
FOR XML RAW('ROW'):将每行结果包装为<ROW>标签,和Oracle默认行标签完全匹配ROOT('ROWSET'):在外层添加<ROWSET>根标签,对齐Oracle默认的XML根节点结构TYPE:指定返回结果为SQL Server原生XML类型
2. 返回字符串类型
如果原逻辑需要返回XML格式的字符串而非XML类型,追加.value转换即可:
SELECT ( SELECT employee_id, first_name, salary FROM employees WHERE department_id = 10 FOR XML RAW('ROW'), ROOT('ROWSET'), TYPE ).value('.', 'NVARCHAR(MAX)') AS emp_xml
常用适配调整
如果原Oracle逻辑中对dbms_xmlgen做了自定义配置,可通过调整FOR XML参数匹配:
- 不需要根节点:删除
ROOT('ROWSET')配置即可 - 字段作为行属性而非子节点:默认模式即可满足,无需额外配置
- 字段作为子节点:追加
ELEMENTS参数,示例:FOR XML RAW('ROW'), ROOT('ROWSET'), ELEMENTS, TYPE - 自定义行/根标签名:修改
RAW和ROOT后引号内的内容即可
内容的提问来源于stack exchange,提问作者Krishna Kumar Pandey
相关产品推荐
相关产品推荐

