sql-server - T-SQL 生成 XML
问题描述
我们有一个表,其列结构为:
- MainPhoneTypeCode
- 主电话号码
- AlternateNumberTypeCode
- 备用电话号码
并要求输出以下 XML:
<ns0:PhoneNumberList>
<ns0:PhoneNumber Type="0096">
<ns0:Number>(08) 8232 5550</ns0:Number>
</ns0:PhoneNumber>
<ns0:PhoneNumber Type="0026">
<ns0:Number>(08) 8336 1050</ns0:Number>
</ns0:PhoneNumber>
</ns0:PhoneNumberList>
到目前为止,对于主要电话,我有:
WITH xmlnamespaces ('http://www.sifassociation.org/datamodel/au/3.4' AS ns0)
SELECT si.MainPhoneTypeCode AS [@Type]
,si.MainPhoneNumber AS [ns0:Number]
FROM EDU.tbl_EDU_SchoolInfo si
WHERE si.SchoolInfoID = 4
FOR XML PATH('ns0:PhoneNumber'), TYPE, ROOT('ns0:PhoneNumberList')
生成:
<ns0:PhoneNumberList xmlns:ns0="http://www.sifassociation.org/datamodel/au/3.4">
<ns0:PhoneNumber Type="0096">
<ns0:Number>(08) 8232 5550</ns0:Number>
</ns0:PhoneNumber>
</ns0:PhoneNumberList>
但不确定如何添加要包含在 PhoneNumberList 元素中的备用号码。
解决方案
需要命名空间声明,因为所有 XML 标记中都有命名空间前缀。
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE
(
SchoolInfoID INT PRIMARY KEY
, MainPhoneTypeCode CHAR(4)
, MainPhoneNumber VARCHAR(20)
, AlternateNumberTypeCode CHAR(4)
, AlternatePhoneNumber VARCHAR(20)
);
INSERT INTO @tbl (
SchoolInfoID,
MainPhoneTypeCode,
MainPhoneNumber,
AlternateNumberTypeCode,
AlternatePhoneNumber
)
VALUES
(4, '0096', '(08) 8232 5550', '0026', '(08) 8336 1050');
-- DDL and sample data population, end
;WITH XMLNAMESPACES ('http://www.sifassociation.org/datamodel/au/3.4' AS ns0)
SELECT MainPhoneTypeCode AS [ns0:PhoneNumber/@Type]
, MainPhoneNumber AS [ns0:PhoneNumber/ns0:Number]
, ''
, AlternateNumberTypeCode AS [ns0:PhoneNumber/@Type]
, AlternatePhoneNumber AS [ns0:PhoneNumber/ns0:Number]
FROM @tbl
WHERE SchoolInfoID = 4
FOR XML PATH(''), TYPE, ROOT('ns0:PhoneNumberList');
输出
<ns0:PhoneNumberList xmlns:ns0="http://www.sifassociation.org/datamodel/au/3.4">
<ns0:PhoneNumber Type="0096">
<ns0:Number>(08) 8232 5550</ns0:Number>
</ns0:PhoneNumber>
<ns0:PhoneNumber Type="0026">
<ns0:Number>(08) 8336 1050</ns0:Number>
</ns0:PhoneNumber>
</ns0:PhoneNumberList>
推荐阅读
- java - ArrayList[] 需要未经检查的转换以符合 ArrayList
[] - javascript - 成功 requestStorageAccess() 调用后,Firefox Storage Access API 拒绝本地存储
- excel - Excel 到 SAP 图形用户界面
- javascript - 评估错误:由 JavaScript 探针错误引起
- c# - WPF 数据绑定到对象的属性
- css - 更改 tabBox 标题中字体的颜色和大小
- sql - 在 SQL 中创建一个列表并在 FROM 行之后遍历该列表
- javascript - 反应 es6 语法
- php - 将数组元素移动到数组的开头?
- javascript - 在我们的外部 Angular 库中实现 controlValueAccessor?