2012-06-22 50 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 
)