我需要以下列格式解析包含一些文本和HTML表的列(此奇迹的5百万行):
<div>Some smart text with number 148974751</div>
<div>
<table border="1" >
<th>Header col 1</th>
<th>Header col 2</th>
<th>Header col 3</th>
<tr>
<td>ParName 1</td>
<td>Date Value</td>
<td>Date Value
</td>
</tr>
<tr>
<td>ParName 2</td>
<td>Int value</td>
<td>Ubt value</td>
</tr>
<tr>
<td>ParName 3</td>
<td>String value</td>
<td>String value
</td>
</tr>
</table>
</div>
所以总有3列,第一列<td>
总是包含字符串,第二列和第三列包含valude(date,datetime,int,numeric,string)。每个已处理的数据库行中有1到大约8 <tr>
行
我搜索了论坛,并且从零碎的角度有一些想法,最好的方法是创建一个函数来一次处理一行。
该函数可能会将HTML代码转换为XML,然后在行和单元格上处理简单的逻辑。
首先,我想我应该将HTML转换为XML:
SELECT CAST(htmlCell as xml) as XMLcode INTO #TMP FROM SrcTable;
这似乎有效。然后获取单元格值(仅作为字符串启动,没有必要解析Int / numeric / bit / ...值):
SELECT xmlCode.value('(*/td)[1]', 'nvarchar(max)') FROM #TMP
这不起作用,我已经迷路了。我需要从<td>
单元格中检索内容,包括列索引。
最后,我会按照这些方针做点什么:
INSERT INTO TargetTable (ParamName, StringValue) SELECT ParamName, StringValue FROM #TMP;