0

我有一个名为 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);

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

谢谢你的帮助。

4

2 回答 2

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);
于 2012-07-11T07:26:00.780 回答
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)
于 2012-07-11T04:58:38.500 回答