【发布时间】:2011-12-22 19:37:40
【问题描述】:
我已将一个对象序列化为我的 SQL Server 2008 数据库中的一个 XML 列。
xml 看起来像这样:
<SimpleUserData xmlns="http://schemas.datacontract.org/2004/07/MyProject.CustomFx.Web" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="1" z:Type="MyProject.CustomFx.Web.SimpleUserData" z:Assembly="MyProject.CustomFx.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<BatchDescription z:Id="2">I want this value</BatchDescription>
<BatchID>9c437c08-0f28-4c77-9a50-49a7a4e8930a</BatchID>
<BatchTemplateID>And this value too</BatchTemplateID>
</SimpleUserData>
我想编写一个查询来显示元素 BatchDescription 和 BatchTemplateID 中的值。
我的查询现在看起来像这样:
declare @xmlobj as xml = '<SimpleUserData xmlns="http://schemas.datacontract.org/2004/07/MyProject.CustomFx.Web" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="1" z:Type="MyProject.CustomFx.Web.SimpleUserData" z:Assembly="MyProject.CustomFx.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<BatchDescription z:Id="2">I want this value</BatchDescription>
<BatchID>9c437c08-0f28-4c77-9a50-49a7a4e8930a</BatchID>
<BatchTemplateID>And this value too</BatchTemplateID>
</SimpleUserData>';
select
@xmlobj.query('
declare namespace x="http://schemas.datacontract.org/2004/07/MyProject.CustomFx.Web";
(/x:SimpleUserData[1]/x:BatchDescription[1])
') as value1
,@xmlobj.query('
declare namespace x="http://schemas.datacontract.org/2004/07/MyProject.CustomFx.Web";
(/x:SimpleUserData[1]/x:BatchTemplateID[1])
') as value2;
这很接近;它返回整个标签和其中的值。
我怎样才能只获得值(即“我想要这个值”和“还有这个值”)
【问题讨论】:
-
尝试使用 .value 而不是 .query 并带有指定数据类型的第二个参数。
-
行得通!现在我觉得自己像个经过认证的白痴:) 如果您将此评论作为实际答案,我会支持并接受它。谢谢!
标签: xml sql-server-2008