我有一个表,我正试图从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命令(成功)
- 设置源连接(成功)
- 设置目的地连接(成功)
- 验证(成功)
- 准备执行(成功)
- 预执行(成功)
- 执行(警告)
消息
*警告:准备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。组件上的ProcessInput方法 “目标 - 查询”(34)失败,错误代码为0xC0209029 处理输入“目的地输入”(45)。确定的组件 从ProcessInput方法返回错误。错误是特定的 到组件,但错误是致命的,将导致数据流 任务停止运行。在此之前可能会发布错误消息 有关失败的更多信息。
错误0xc02020c4:数据流任务1:尝试向数据流任务缓冲区添加行失败,错误代码为0xC0047020。
- 上的PrimeOutput方法
错误0xc0047038:数据流任务1:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。组件“Source
查询“(1)返回错误代码0xC02020C4。当管道引擎调用PrimeOutput()时,组件返回失败代码。 失败代码的含义由组件定义,但错误 是致命的,管道停止执行。可能有错误 在此之前发布的消息以及有关失败的更多信息。
执行后(成功)
消息- 信息0x4004300b:数据流任务1:“组件”目的地 - 查询“(34)”写了7465行。
答案 0 :(得分: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”。