让我们说,我有两张桌子
ItemGoods,ServiceGoods,其他列中包含名称和价格。
代表销售的各种商品。
我想将它选择为单个xml结构。
现在我正在使用此选择
DECLARE @goods_prices VARCHAR(8000)
SET @goods_prices = (select * from
(SELECT [name] item_name,
[cost] price
FROM ItemGoods
UNION
SELECT [name] service_name,
[cost] price
FROM ServiceGoods) goods
FOR XML AUTO);
输出我得到:
<goods>
<itemName>Item1</itemName>
<price>299.0</price>
</goods>
<goods>
<itemName>Service1</itemName>
<price>4,99</price>
</goods>
我寻求的输出类似于
<goods>
<itemGoods>
<item>
<itemName>Item1</itemName>
<price>299.0</price>
</item>
</itemGoods>
<serviceGoods>
...
</serviceGoods>
</goods>
我如何实现这一目标?我需要将结果打包成一个变量。 只要我可以从服务
定义项目,就可以使用更简单的xml结构答案 0 :(得分:1)
它适用于FOR XML EXPLICIT(Use EXPLICIT Mode with FOR XML
declare @ItemGoods table(name varchar(50), cost varchar(50))
declare @ServiceGoods table(name varchar(50), cost varchar(50))
Insert into @ItemGoods(name, cost) values('Item1', '299'), ('Item2', '333')
Insert into @ServiceGoods(name, cost) values('Serv1', '555'),('Serv2', '222')
Select 1 as Tag, NULL as parent
, NULL as [goods!1!]
, NULL as [itemGoods!2!]
, NULL as [item!3!itemName!Element]
, NULL as [item!3!price!Element]
, NULL as [serviceGoods!4!]
, NULL as [item!5!itemName!Element]
, NULL as [item!5!price!Element]
Union All
Select 2 as Tag, 1 as parent
, NULL
, NULL, NULL, NULL
, NULL, NULL, NULL
Union All
Select 3 as Tag, 2 as parent
, NULL
, NULL, [name], [cost]
, NULL, NULL, NULL
FROM @ItemGoods item
Union All
Select 4 as Tag, 1 as parent
, NULL
, NULL, NULL, NULL
, NULL, NULL, NULL
Union All
Select 5 as Tag, 4 as parent
, NULL
, NULL, NULL, NULL
, NULL, [name], [cost]
FROM @ServiceGoods item
For xml explicit
输出:
<goods>
<itemGoods>
<item>
<itemName>Item1</itemName>
<price>299</price>
</item>
<item>
<itemName>Item2</itemName>
<price>333</price>
</item>
</itemGoods>
<serviceGoods>
<item>
<itemName>Serv1</itemName>
<price>555</price>
</item>
<item>
<itemName>Serv2</itemName>
<price>222</price>
</item>
</serviceGoods>
</goods>
答案 1 :(得分:0)
你可以使用它(我使用变量表是为了方便,但它也适用于真正的表):
string SelectedArticle
输出:
DECLARE @ItemGoods TABLE (
NAME NVarChar(50) NOT NULL,
COST Decimal(18, 2) NOT NULL
)
DECLARE @ServiceGoods TABLE (
NAME NVarChar(50) NOT NULL,
COST Decimal(18, 2) NOT NULL
)
INSERT INTO @ItemGoods VALUES('Item1', 299.0)
INSERT INTO @ServiceGoods VALUES('Service1', 4.99)
SELECT (
SELECT NAME AS itemName
, COST AS price
FROM @ItemGoods
FOR XML PATH('Item'), TYPE
) AS ItemGoods
, (
SELECT NAME AS itemName
, COST AS price
FROM @ServiceGoods
FOR XML PATH('Service'), TYPE
) AS ServiceGoods
FOR XML PATH('Goods')