2012-04-19 52 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