我目前能够将1个XML转换为表,但我试图将所有xml转换为单个表。我有大约600万个XML条目,我想一次性完成然后排序。有什么想法吗?
catLabel.text
输出:
DECLARE @docHandle INT;
SET @docHandle = 0;
DECLARE @xml XML;
SELECT @xml = XMLData
FROM DaTable
WHERE FileType = 'Transaction';
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xml;
SELECT sub.id, sub.localname, val.[text]
FROM OPENXML(@docHandle, N'') AS par
LEFT JOIN OPENXML(@docHandle, N'') AS sub
ON sub.parentid = par.id
LEFT JOIN OPENXML(@docHandle, N'') AS val
ON val.parentid = sub.id
WHERE sub.localname != 'xsd'
AND sub.localname != 'xsi'
AND sub.localname != '#text';
答案 0 :(得分:1)
认为你只需使用光标。
DECLARE @xml XML;
DECLARE @cursor CURSOR;
SET @cursor = CURSOR FAST_FORWARD FOR
SELECT XMLData FROM DaTable WHERE FileType = 'Transaction';
DECLARE @result TABLE
(tag_name nvarchar(100) NOT NULL,
xml_text nvarchar(100) NOT NULL);
OPEN @cursor;
WHILE 1 = 1 BEGIN
FETCH NEXT FROM @cursor INTO @xml;
IF @@FETCH_STATUS < 0 BREAK;
INSERT INTO @result (tag_name, xml_text)
SELECT node.value('local-name(..)', 'nvarchar(100)'),
node.value('.', 'nvarchar(100)')
FROM @xml.nodes('//text()') q(node);
END;
CLOSE @cursor;
DEALLOCATE @cursor;
SELECT tag_name, xml_text FROM @result;
答案 1 :(得分:0)
如果xml文件的架构完全相同,那么我建议您只需通过PowerShell将xml文件合并到一个文件中。然后,然后在组合文件中的SQL Server中运行您的查询。
我在堆栈溢出时找到的以下power shell脚本应该可以完成这项工作:
$xmldoc = new-object xml
$rootnode = $xmldoc.createelement("xml")
$xmldoc.appendchild($rootnode)
$dec = $xmldoc.CreateXmlDeclaration("1.0", $null, $null)
$xmldoc.InsertBefore($dec, $rootnode)
$files = gci "c:\source_files\*.xml"
foreach ($file in $files) {
$xmltoadd = select-xml -path $file.FullName -xpath "/*"
$xml2 = $xmltoadd.node.InnerXml
$finalxml += $xml2
}
$rootnode.innerxml = $finalxml
$xmldoc.Save("C:\final_output\combined.xml")
将目录字符串“c:\ source_files \”替换为xml文件所在的目录。同时将保存位置“C:\ final_output \ combined.xml”更改为所需的输出文件位置。