1
我需要从SQL Server 2008中的XML中获取一些信息,但我甚至无法从中获得基本属性。我尝试过的所有样品都失败了。表名是Item
,xml列名是Data
。在sql中查询XML值
简体XML看起来是这样的:
<AnchoredXml xmlns="urn:schema:Microsoft.Rtc.Management.ScopeFramework.2008" SchemaWriteVersion="2">
<Key ScopeClass="Global">
<SchemaId Namespace="urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008" ElementName="Topology" />
<AuthorityId Class="Host" InstanceId="00000000-0000-0000-0000-000000000000" />
</Key>
<Dictionary Count="1">
<Item>
<Key />
<Value Signature="a3502dd0-8c16-4023-9eea-30ea1c7a3a2b">
<Topology xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008">
<Services>
<Service RoleVersion="1" ServiceVersion="6" Type="Microsoft.Rtc.Management.Deploy.Internal.ServiceRoles.FileStoreService">
<ServiceId SiteId="1" RoleName="FileStore" Instance="1" />
<DependsOn />
<InstalledOn>
<ClusterId SiteId="1" Number="1" />
</InstalledOn>
<Ports xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.ServiceRoles.2008" />
<FileStoreService xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.ServiceRoles.2008" ShareName="lyncShare" />
</Service>
</Services>
</Topology>
</Value>
</Item>
</Dictionary>
</AnchoredXml>
我需要阅读AnchoredXml /按键/ SchemaId/@命名空间信息来选择合适的XML(有更多行)。上面的示例xml是正确的。之后我需要找到合适的服务
Type="Microsoft.Rtc.Management.Deploy.Internal.ServiceRoles.FileStoreService"
其中是我需要的FileStoreService/@ ShareName。
我试过打印命名空间attributte为开始,但没有示例代码工作。 试了几次:
SELECT c.p.value('(@Namespace)[1]', 'varchar(50)') as 'Nmspace'
FROM Item
CROSS APPLY Data.nodes('/AnchoredXml/Key/SchemaId') c(p)
返回空结果集
SELECT Data.value('(/AnchoredXml/Key/SchemaId/@Namespace)[1]', 'varchar(50)')
FROM Item
返回NULL所有行
SELECT
It.Data.exist('/AnchoredXml/Key/SchemaId[@Namespace="Microsoft.Rtc.Management.Deploy.Topology.2008"]')
FROM [xds].[dbo].[Item] AS It
返回0的所有行也没有引号( “”)
至少得到属性测试的工作示例代码可能就足够了我会找出其余的。 你能帮我找到我的疑问中的错误或者可能确定一些其他问题吗? 谢谢
这确实是我的问题的原因!谢谢。只需要添加一个过滤器即可。 WHERE Data.exist('(/ AnchoredXml/Key/SchemaId [@ Namespace =“urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008”])')= 1 – Geralt 2014-11-25 12:28:12