1

我使用 SSIS 和 [SharePointListAdapters][1] [1]: http://sqlsrvintegrationsrv.codeplex.com/releases 从我的 SharePoint 2010 列表中导入数据并将其放入 SQL Server 2008 表中。大约有 500 行数据。现在的挑战是适当地解析数据。我有几列周围有 html 标签。

例如,Column Project Desc 有类似 Project Desc 的数据

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

在谷歌搜索中,我发现了下面的功能。它按预期工作。我的问题是如何编辑此函数以将名为 Project Desc 的列名作为参数,以便该特定列中的所有数据都将丢弃 html 标记。

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>') 
4

3 回答 3

1

创建函数后,您只需将其用作表中的普通字段,并将源表和字段放在参数所在的位置...

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

(您无需编辑该函数,只需向其提供表中的数据。)

于 2012-06-22T14:30:34.690 回答
1

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

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

于 2012-06-22T14:31:41.827 回答
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
)
于 2012-06-25T04:19:59.570 回答