使用命名空间SQL Server

时间:2016-03-04 18:45:12

标签: sql sql-server

我们正在清理数据库中的数据,并且列中包含我们希望能够转换为纯文本的XML详细信息。

下面是表格列中的示例XML。

 <FlowDocument PagePadding="5,5,5,5" Name="RTDocument" AllowDrop="True" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
     <Paragraph>FILE DESTROYED - MAY 21st, 2008</Paragraph>
     <Paragraph>todo</Paragraph>
 </FlowDocument>

我正在使用此查询,但由于Namespace的存在,它没有呈现所需的输出(如果我从XML中删除命名空间,我能够成功呈现输出)。

SELECT  
    CAST(CAST(Comments AS XML).query('data(/FlowDocument/Paragraph)') AS VARCHAR(7000)) AS activity 
FROM 
    dbo.Activities
WHERE 
    ActivityID = 1

请帮助解决这个问题。

由于

2 个答案:

答案 0 :(得分:3)

您也可以像这样声明命名空间:

;WITH xmlnamespaces(DEFAULT 'http://schemas.microsoft.com/winfx/2006/xaml/presentation')
SELECT
CAST(CAST(Comments AS XML).query('data(/FlowDocument/Paragraph)') AS VARCHAR(7000)) AS activity 
FROM [dbo].Activities where ActivityID=1

此处提供了其他选项:parsing xml using sql server

答案 1 :(得分:2)

您需要在查询中使用名称空间声明:https://msdn.microsoft.com/en-us/library/ms191474.aspx

所以你的查询部分看起来像:

query('
declare namespace NS="http://schemas.microsoft.com/winfx/2006/xaml/presentation";
data(/NS:FlowDocument/NS:Paragraph)
')