2012-06-22 53 views
1

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

对于例如,列项目说明有数据等 项目说明

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

回答

1

一旦你创建的功能,你只需要使用它,如果它是一个表中的普通区,并把在该参数去的地方源表和字段...

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

(如果您没有编辑的功能,你只是从表中的数据提供它。)

+0

Thanks Dems。那太简单了。非常感谢。 :)我可以在4分钟内投票答复。所以我会在几分钟内看到你的投票。 :) – Nemo

1

SQL和T-SQL都没有办法解析HTML。不要将HTML与XML混淆...

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

+0

他不是试图解析HTML,他是从列数据剥离HTML标签。你尝试过这个功能吗?它工作正常。 – EkoostikMartin

+0

如果你的html标签格式正确,该函数可以正常工作。如果您的列有像

Training should consist of:
1. Written material
2. Live meetings
3. 1x1 where needed
4. Pod Casts (moved to new project)
5. Short video presentations to be loaded to Ed Services for field consumption (moved to new project)
 
的数据。然后它失败说xml解析第1行:字符46,格式良好的检查:未声明的实体...任何帮助? – Nemo

+0

HTML是**不是** XML。 *格式良好* HTML不能被解析为XML。使用HTML解析器。 –

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 
)