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

时间:2012-07-11 03:37:27

标签: 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>
   <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);

查询运行时没有错误,但没有数据插入到代码表中。 我看不出我错过了什么。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

使用本机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)

答案 1 :(得分:1)

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);