-1

我有一个表,我正试图从 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 命令(成功)
- 设置源连接(成功)
- 设置目标连接(成功)
- 验证(成功)
- 准备执行( Success)
- 预执行 (Success)
- Executing (Warning)
消息
* 警告:准备 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。处理输入“目标输入”(45) 时,组件“目标 - 查询”(34) 上的 ProcessInput 方法失败,错误代码为 0xC0209029。已识别的组件从 ProcessInput 方法返回错误。该错误是特定于组件的,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

  • 错误 0xc02020c4:数据流任务 1:尝试向数据流任务缓冲区添加行失败,错误代码为 0xC0047020。

  • 错误 0xc0047038:数据流任务 1:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。组件“Source”上的 PrimeOutput 方法

  • Query"(1)返回错误码0xC02020C4。当管道引擎调用PrimeOutput()时组件返回了一个失败码。失败码的含义由组件定义,但是错误是致命的并且管道停止执行。可能有在此之前发布错误消息,其中包含有关失败的更多信息。

  • 执行后(成功)
    消息

  • 信息 0x4004300b:数据流任务 1:“组件“目的地 - 查询”(34)”写入了 7465 行。
4

1 回答 1

0

在该字段的选择语句中,仅提取您想要使用 SUBSTRING 和 CHARINDEX 剪切标签之间的部分的部分,假设每个字段确实只有一个这样的标签。下面,[HTML] 实际上是将您的字段转换为 VARCHAR,因此在您看到 [HTML] 的地方,您将放置以下内容:

CAST([YourHTMLFieldName] AS VARCHAR(MAX))

这基本上是说“给我和之间的文字:

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

您可能需要稍微尝试一下,例如,如果输出错误地包含“”标签,您可以将其更改为“CHARINDEX('') + 5”。

于 2012-04-19T20:04:54.070 回答