Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将XML导入SQL Server 2005未导入的数据_Sql_Xml_Sql Server 2005_Import - Fatal编程技术网

将XML导入SQL Server 2005未导入的数据

将XML导入SQL Server 2005未导入的数据,sql,xml,sql-server-2005,import,Sql,Xml,Sql Server 2005,Import,我有一个名为Code的表,有两个字段,ID和Code 我有一个XML文件: <DataSet> <scan> <ID>4</ID> <Code>420</Code> </scan> <scan> <ID>5</ID> <Code>420</Code> </scan> &l

我有一个名为Code的表,有两个字段,ID和Code

我有一个XML文件:

 <DataSet>
   <scan>
     <ID>4</ID>
     <Code>420</Code>
   </scan>
   <scan>
     <ID>5</ID>
     <Code>420</Code>
   </scan>
   <scan>
     <ID>6</ID>
     <Code>420</Code>
   </scan>
   <scan>
     <ID>4</ID>
     <Code>420</Code>
   </scan>
   <scan>
     <ID>5</ID>
     <Code>420</Code>
   </scan>
  </DataSet>
我用这个

 INSERT INTO code (id,code) 
 SELECT X.scan.query('id').value('.','INT'),
   X.scan.query('code').value('.','VARCHAR(30)')
 FROM ( 
 SELECT CAST(x AS XML)
 FROM OPENROWSET(
      BULK 'C:\dataimport.xml',
      SINGLE_BLOB) AS T(x)
       ) AS T(x)
 CROSS APPLY x.nodes('dataset/scan') AS X(scan);
查询运行时不会出错,但不会将任何数据插入到代码表中。 我看不出我错过了什么


谢谢你的帮助

使用本机SQL Server 2005 XML支持—类似这样的支持应该可以:

DECLARE @input XML

SELECT @input = CAST(x AS XML)
FROM OPENROWSET(BULK 'C:\dataimport.xml', SINGLE_BLOB) AS T(x)

INSERT INTO Code(ID, Code)
   SELECT 
       Scan.value('(ID)[1]', 'int'),
       Scan.value('(Code)[1]', 'varchar(30)')
   FROM @input.nodes('/DataSet/scan') AS Tbl(Scan)

SQL Server中的XML区分大小写

试试这个:

INSERT INTO code (id,code)
SELECT X.scan.query('ID').value('.','INT'),
       X.scan.query('Code').value('.','VARCHAR(30)')
FROM ( 
SELECT CAST(x AS XML)
FROM OPENROWSET(
    BULK 'C:\dataimport.xml',
    SINGLE_BLOB) AS T(x)
      ) AS T(x)
CROSS APPLY x.nodes('DataSet/scan') AS X(scan);

您解决了问题,但未提及问题所在+1以获得更好的外观和可能更好的性能。@MikaelEriksson:我认为这是因为XPath表达式
.nodes('dataset/scan')
没有注意字符串的大小写-它应该是
.nodes('dataset/scan')
在XML中-但这只是一个猜测…:-)谢谢你的指导和帮助。知道当我得到相同的结果时,我知道要查找什么。在查询的.nodes()部分中是否只区分大小写?我在其他领域测试了案例敏感性,但案例似乎并不重要。我将scan.query改为scan.query,效果很好。我认为.nodes('DataSet/scan')需要匹配XML中节点的大小写。对吗?ThanksIt是区分大小写的xPath表达式。在节点、查询和值中使用的字符串。