0

IDとCodeの2つのフィールドを持つ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

ネイティブのSQLServer2005XMLサポートを使用します-次のようなものが機能するはずです:

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 に答える
1

SQLServerの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 に答える