从ntext中提取值

时间:2018-08-17 14:12:36

标签: sql sql-server

所以我有以下选择语句:

SELECT sql1.ExtensionSettings
FROM (SELECT *
      FROM [DBN-SERVER].[ReportServer].[dbo].[Subscriptions]
     ) sql1
WHERE report_oid = 'REPORT_ID' AND InactiveFlags = 0 AND
      (sql1.ExtensionSettings LIKE '%<Value>EXCELOPENXML</Value>%') OR
      (sql1.ExtensionSettings LIKE '%<Value>PDF</Value>%')

该语句将返回其中的40行:

"["<ParameterValues><ParameterValue><Name>TO</Name><Value></Value></ParameterValue><ParameterValue><Name>CC</Name><Value></Value></ParameterValue><ParameterValue><Name>IncludeReport</Name><Value>True</Value></ParameterValue><ParameterValue><Name>RenderFormat</Name><Value>EXCELOPENXML</Value></ParameterValue><ParameterValue><Name>Subject</Name><Value>AK Steel Daily Combined Order Status report for THE MILL STEEL CO-146159 (Excel version)</Value></ParameterValue><ParameterValue><Name>Comment</Name><Value>Attached is the daily order status report in Excel format</Value></ParameterValue><ParameterValue><Name>IncludeLink</Name><Value>False</Value></ParameterValue><ParameterValue><Name>Priority</Name><Value>NORMAL</Value></ParameterValue></ParameterValues>"]"

我需要提取标记中的所有内容...我知道这里没有显示任何内容,但是我必须删除电子邮件...没有人知道我要这样做40行吗?

1 个答案:

答案 0 :(得分:2)

您的ntext值是一个XML文档,因此您可以使用以下内容:

declare @data xml = '
    <ParameterValues>
       <ParameterValue>
          <Name>IncludeReport</Name>
          <Value>True</Value>
       </ParameterValue>
       <ParameterValue>
          <Name>RenderFormat</Name>
          <Value>EXCELOPENXML</Value>
       </ParameterValue>
       <ParameterValue>
          <Name>Subject</Name>
          <Value>
              AK Steel Daily Combined Order Status report for
              THE MILL STEEL CO-146159 (Excel version)
          </Value>
       </ParameterValue>
       <ParameterValue>
          <Name>Comment</Name>
          <Value>Attached is the daily order status report in Excel format</Value>
       </ParameterValue>
       <ParameterValue>
          <Name>IncludeLink</Name>
          <Value>False</Value>
       </ParameterValue>
       <ParameterValue>
          <Name>Priority</Name>
          <Value>NORMAL</Value>
       </ParameterValue>
    </ParameterValues>'

SELECT  c.value('(Name)[1]', 'nvarchar(max)') Name,
        c.value('(Value)[1]', 'nvarchar(max)') Value
FROM    @data.nodes('/ParameterValues/ParameterValue') t(c)

最终,您可以在输出中添加一些行键,然后将结果PIVOT