解析SQL Server数据

时间:2012-06-22 14:26:03

标签: sql sql-server sql-server-2008 tsql

我使用了SSIS和SharePointListAdapters 从我的SharePoint 2010列表导入数据并将其放入SQL Server 2008表。大约有500行数据。现在的挑战是适当地解析数据。我有几列在它们周围有html标签。

例如,Column Project Desc有类似的数据 项目描述

<div class="ExternalClass914BB5DA5CB142EB854C739EAACEE3BB">
    <div>Import Data from SharePoint list to Database.
    </div>
</div>

在Google上,我找到了下面的功能。它按预期工作。我的问题是如何编辑此函数以将名为Project Desc的列名称作为参数,以便该特定列中的所有数据都将丢弃html标记。任何想法?非常感谢Adv!

create function dbo.StripHTML( @text varchar(max) ) returns varchar(max) as 
begin 
    declare @textXML xml 
    declare @result varchar(max) 
    set @textXML = @text; 
    with doc(contents) as 
    ( 
        select chunks.chunk.query('.') from @textXML.nodes('/') as chunks(chunk) 
    ) 
    select @result = contents.value('.', 'varchar(max)') from doc 
    return @result 
end 
go 
select dbo.StripHTML('<div class="ExternalClassB1D90504EAFF42BE8A8056E686F4E195"> <div>Import Data from SharePoint list to Database.</div></div>') 

3 个答案:

答案 0 :(得分:1)

一旦你创建了这个函数,就可以像使用表中的普通字段一样使用它,并将源表和字段放在参数所在的位置......

SELECT
  dbo.StripHTML( yourTable.yourColumn ) AS yourResults
FROM
  yourTable

(您不需要编辑该功能,只需提供表格中的数据。)

答案 1 :(得分:1)

SQL和T-SQL无法解析HTML。不要将HTML与XML混淆......

您可以使用类似HTML Agility Pack的内容来解析托管代码中的HTML,无论是在SSIS包中还是作为SQLCLR部署的函数。

答案 2 :(得分:1)

我在SQLServerCentral.com上找到了这个答案。因为它是一个iTVF(内联表值函数),它比你现在使用的功能更快。事实上大约快两倍。参考:http://www.sqlservercentral.com/Forums/FindPost1198135.aspx

CREATE FUNCTION dbo.StripHtmlTags2
        (@HtmlText XML )
RETURNS TABLE
     AS 
 RETURN
(
SELECT
    @HtmlText.value('(.)[1]', 'nvarchar(max)') AS result
)