1
我是XML和SQL Server的新手,并试图将XML文件导入到SQL Server 2010中。我有14个表,我想将这些数据解析为数据。所有14个表名在XML中都列为节点(我认为)我发现了一些可以与简单示例XML一起工作的示例代码,但是我的XML看起来更复杂一些,可能不是最佳结构;不幸的是,我无法改变这一点。作为基本尝试,我尝试将数据插入到一个现有表的一个字段(SILVX_SN16000)中,但消息窗格显示“(0行(s)affected affected。)预先感谢您看到此内容将XML导入到现有表中批量导入
USE TEST
Declare @xml XML
Select @xml =
CONVERT(XML,bulkcolumn,2) FROM OPENROWSET(BULK 'C:\Users\Kevin_S\Documents \SilvxInSightImport.xml',SINGLE_BLOB) AS X
SET ARITHABORT ON
Insert into [SILVX_SN16000]
(
md_group
)
Select
P.value('MD_GROUP[1]','NVARCHAR(255)') AS md_group
From @xml.nodes('/TableData/Row') PropertyFeed(P)
这里是我的XML的一个备受缩短(行删除)版本:
<?xml version="1.0" ?>
<SilvxInSightImport Version="1.0" Host="uslsss17" Date="14-09-14_20-40-02">
<Tables Count="14">
<Table Name="SN16000">
<TableSchema>
<Column><COLUMN_NAME>PARENT_HPKEY</COLUMN_NAME><DATA_TYPE>VARCHAR2</DATA_TYPE></Column>
<Column><COLUMN_NAME>MD_GROUP</COLUMN_NAME><DATA_TYPE>VARCHAR2</DATA_TYPE></Column>
<Column><COLUMN_NAME>PKEY</COLUMN_NAME><DATA_TYPE>NUMBER</DATA_TYPE></Column>
<Column><COLUMN_NAME>S_STATE</COLUMN_NAME><DATA_TYPE>VARCHAR2</DATA_TYPE></Column>
<Column><COLUMN_NAME>NAME</COLUMN_NAME><DATA_TYPE>VARCHAR2</DATA_TYPE></Column>
<Column><COLUMN_NAME>ROUTER_ID</COLUMN_NAME><DATA_TYPE>VARCHAR2</DATA_TYPE></Column>
<Column><COLUMN_NAME>IP_ADDR</COLUMN_NAME><DATA_TYPE>VARCHAR2</DATA_TYPE></Column>
</TableSchema>
<TableData>
<Row><MD_GROUP>100.120.25162</MD_GROUP><PARENT_HPKEY>100</PARENT_HPKEY> <PKEY>161888</PKEY><NAME>UODEDTM010</NAME><ROUTER_ID>10.41.32.129</ROUTER_ID> <IP_ADDR>10.41.32.129</IP_ADDR><S_STATE>IS-NR</S_STATE></Row>
<Row><MD_GROUP>100.120.25162</MD_GROUP><PARENT_HPKEY>100</PARENT_HPKEY> <PKEY>278599</PKEY><NAME>UODEETM010</NAME><ROUTER_ID>10.41.4.129</ROUTER_ID> <IP_ADDR>10.41.4.129</IP_ADDR><S_STATE>IS-NR</S_STATE></Row>
<Row><MD_GROUP>100.120.25162</MD_GROUP><PARENT_HPKEY>100</PARENT_HPKEY> <PKEY>183583</PKEY><NAME>UODEGRM010</NAME><ROUTER_ID>10.41.76.129</ROUTER_ID> <IP_ADDR>10.41.76.129</IP_ADDR><S_STATE>IS-NR</S_STATE></Row>
NT_HPKEY>100</PARENT_HPKEY><PKEY>811003</PKEY><NAME>UODWTIN010</NAME> <ROUTER_ID>10.27.36.130</ROUTER_ID><IP_ADDR>10.27.36.130</IP_ADDR><S_STATE>IS-NR</S_STATE> </Row>
</TableData>
</Table>
</Tables>
</SilvxInSightImport>
非常感谢!这很好。另一件小事:如果我想插入源XML的文件名(可以在XML的第二行的元素中找到),我可以在插入语句中以某种方式包含它吗?这就是我所说的元素: –
2014-10-10 18:33:57
@Kevin_S你希望这个值是'SilvxInSightImport'吗?如果是这样,您可以将其作为常量添加到列列表中,因为您已经在.nodes()的xPath中将该值作为常量。如果根节点可以有不同的名称,可以将xPath更改为使用通配符“*”代替“SilvxInSightImport”,并使用'local-name()'函数来提取节点名称。看看[SQL小提琴](http://sqlfiddle.com/#!6/d41d8/22171)。 – 2014-10-10 18:47:23
是的。这样可行!谢谢! – 2014-10-14 17:06:36