【发布时间】:2019-10-01 13:07:54
【问题描述】:
如何在 SQL Server Management Studio 中从 SQL Server 表的 XML 列中选择数据?
我想得到这个结果:
orderDdate createdBby orderNo currency taxation inv customer mail
2019-09-05 storefront 000001 USD gross 0099999 Jonh Smith JonhSmith@gmail.com
<orders xmlns="www address">
<order>
<order-date>2019-09-05</order-date>
<created-by>storefront</created-by>
<original-order-no>000001</original-order-no>
<currency>USD</currency>
<taxation>gross</taxation>
<invoice-no>0099999</invoice-no>
<customer>
<customer-name>Jonh Smith</customer-name>
<customer-email>JonhSmith@gmail.com</customer-email>
</customer>
<notes>
<note>
<created-by>system</created-by>
<creation-date>2019-09-06T07:05:03.000Z</creation-date>
<subject>Fulfilment Status</subject>
<text>The order fulfilment status was changed from '01' to '02'.</text>
</note>
<note>
<created-by>system</created-by>
<creation-date>2019-09-06T07:05:03.000Z</creation-date>
<subject>Fulfilment Status</subject>
<text>The order fulfilment status was changed from '02' to '03'.</text>
</note>
<note>
<created-by>system</created-by>
<creation-date>2019-09-06T07:05:03.000Z</creation-date>
<subject>Fulfilment Status</subject>
<text>The order fulfilment status was changed from '03' to '03'.</text>
</note>
</notes>
<product-lineitems>
<product-lineitem>
<product-id>0001</product-id>
<quantity unit="BOX">1.0</quantity>
<tax-rate>0.23</tax-rate>
</product-lineitem>
<product-lineitem>
<product-id>0002</product-id>
<quantity unit="PCS">1.0</quantity>
<tax-rate>0.23</tax-rate>
</product-lineitem>
</product-lineitems>
</order>
我有最后一个问题(我希望);)
如何从 product-lineitems 返回数据。我的意思是:数量,数量单位
我正在尝试这样:但它返回重复的行:(
WITH XMLNAMESPACES(DEFAULT N'www address')
SELECT
o.value(N'(current-order-no/text())[1]',N'varchar(10)') AS OrderNo
,n.value(N'(quantity/text())[1]',N'varchar(10)') AS Qty
,u.value(N'@unit',N'varchar(10)') AS Unit
FROM
dbSupply.dbo.MyXmlTable t
CROSS APPLY
t.XMLData.nodes(N'/orders/order') A(o)
OUTER APPLY
A.o.nodes(N'product-lineitems/product-lineitem') B(n)
OUTER APPLY
A.o.nodes(N'product-lineitems/product-lineitem/quantity') C(u)
'看起来你的帖子主要是代码;请添加更多详细信息' '看起来你的帖子主要是代码;请添加更多详细信息' '看起来你的帖子主要是代码;请添加更多详细信息'
【问题讨论】:
-
总是最好包含期望的结果?它会消除假设,例如您是在寻找列还是行?
-
"如何在 sql server management studio 上从 xml 文件中选择数据?" SSMS 只是一个用于对 SQL Server 实例执行操作的应用程序(通常使用 SQL) .您不使用 SSMS 来读取您使用 SQL Server 执行此操作的文件(我假设为行)。 SSMS 本身没有要连接的 SQL Server 实例,无法从 XML 文件中“选择”数据。在这种情况下,您需要编写一个使用 XQUERY 的 SQL 语句。
-
我正在寻找行
-
“我正在寻找行” 但是
order-date显然是date和created-by是varchar。同一列中不能有不同的数据类型。你能告诉我们(在你的问题中)你期望你的最终结果集是什么样的吗?你自己的尝试也会很有帮助。 -
不,order-date 和 created-by 用于区分列。抱歉,我没听懂您的上一篇文章...我的英文是...:/所以我在看专栏
标签: sql sql-server xml xml-parsing