2012-04-19 50 views
-1

我有一個表,我試圖出口了SQL Server數據庫。其中一列給我很難,導入和導出嚮導正在拋出各種錯誤。只要刪除此列,導出就會完美無誤地運行。SQL Server - 使用正則表達式導出數據?

在數據庫中的列存儲一個完整的HTML文檔作爲文本數據類型。我想從沒有HTML的DIV標記之間的列中的每個字段中僅輸出文本。

例如:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML> 
<HEAD> 
    <STYLE type=text/css> P, UL, OL, DL, DIR, MENU, PRE { margin: 0 auto;}</STYLE> 
    <META content="MSHTML 6.00.2900.3429" name=GENERATOR> 
</HEAD> 
<BODY leftMargin=1 topMargin=1 rightMargin=1> 
    <FONT face=Tahoma size=2> 
     <DIV>[REDACTED TEXT THAT I WANT TO EXPORT]</DIV> 
    </FONT> 
</BODY> 
</HTML> 

即複製粘貼出來的記錄之一。記錄中的每一行都有相同的HTML,但我只想導出編輯的文本。

暫且不論誰設計了這個數據庫/應用程序的傢伙是個白癡,我該如何抓住這些數據呢?如果我可以讓導出嚮導工作,我甚至會滿足於用HTML拉滿整個記錄。

編輯:這裏是導入和導出嚮導報告錯誤:

操作停止...
- 初始化數據流任務(成功)
- 初始化連接(成功)
- 設置SQL命令(成功)
- 設置源連接(成功)
- 設置目標連接(成功)
- Va lidating(成功)
- 準備執行(成功)
- 預執行(成功)
- 執行(警告)
消息
*警告:準備SQL任務1:多步驟OLE DB操作錯誤。檢查每個OLE DB狀態值(如果可用)。沒有工作完成。 (SQL Server導入和導出嚮導)
*警告:準備SQL任務1:多步驟OLE DB操作錯誤。檢查每個OLE DB狀態值(如果可用)。沒有 工作完成。 (SQL Server導入和導出嚮導)

  • 複製到Query(錯誤)
    消息
  • 錯誤爲0xC0202009:數據流任務1:SSIS錯誤代碼DTS_E_OLEDBERROR。發生了OLE DB錯誤。錯誤代碼:0x00040EDA。

  • 錯誤0xc0209029:數據流任務1:SSIS錯誤代碼DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 「輸入‘目的地輸入’(45)」失敗,錯誤代碼0xC020907B發生,並在「輸入‘目的地輸入錯誤行 處置’(45)」關於 錯誤指定失敗。指定的 組件的指定對象發生錯誤。在此之前可能會發布錯誤消息,其中包含有關失敗的更多 信息。

  • 錯誤0xc0047022:數據流任務1:SSIS錯誤代碼DTS_E_PROCESSINPUTFAILED。組件 「目標 - 查詢」(34)上的ProcessInput方法失敗,錯誤代碼爲0xC0209029,而 處理輸入「目標輸入」(45)。已識別的組件 從ProcessInput方法返回錯誤。該錯誤對組件而言是特定的 ,但該錯誤是致命的,並且會導致數據流 任務停止運行。在此 之前可能會發布錯誤消息,並提供有關失敗的更多信息。

  • 錯誤0xc02020c4:數據流任務1:嘗試向數據流任務緩衝區添加行失敗,錯誤代碼爲0xC0047020。

  • 錯誤0xc0047038:數據流任務1:SSIS錯誤代碼DTS_E_PRIMEOUTPUTFAILED。組件上的PrimeOutput方法「源

  • 查詢」(1)返回的錯誤代碼0xC02020C4。當管道引擎調用PrimeOutput()時,組件返回失敗代碼。失敗代碼的含義由組件定義,但錯誤 是致命的,並且管道停止執行。在此之前發佈的消息可能有錯誤 以及有關失敗的更多信息。

  • 後執行(成功)
    消息

  • 信息0x4004300b:數據流任務1: 「組件 」目的地 - 查詢「(34)」,寫7465行。
+0

什麼是錯誤? – 2012-04-19 19:37:01

+0

@FrancisAvila我已經更新了OP。 – 2012-04-19 19:41:10

+0

沒關係,如果我將出口限制爲5000行,它就可以工作。梨我打了一些Excel行數太多的限制。 – 2012-04-19 19:50:01

回答

0

在你該字段的SELECT語句,只提取您要使用SUBSTRING和CHARINDEX切出標籤之間的部分,假設你真的只有每場一個這樣的標記部分。下面,[HTML]實際上是鑄造你的領域變成了VARCHAR,所以在這裏你看到[HTML]你把這個:

CAST([YourHTMLFieldName] AS VARCHAR(MAX)) 

而這實際上是說「給我的文本之間:

SELECT SUBSTRING([HTML], CHARINDEX('<DIV>', [HTML]), CHARINDEX([HTML], '</DIV>') - CHARINDEX([HTML], '<DIV>')) 

你可能需要用它玩了一下,像如果輸出錯誤包括「」的標籤,你可以將其更改爲「它扔CHARINDEX(‘’)+ 5」。

+0

該項目已更改,我不再需要導出數據。我會接受你的答案,因爲它看起來像我需要這樣做。 – 2012-04-20 16:45:49