2012-05-01 4 views
0

私はSQL Serverを初めて使用しており、XML文書からデータベースに行を挿入しようとしています。いくつかの調査を行い、XMLノード関数を使用してXMLを行セットに入れることができました。しかし、私は次に何をすべきか分かりません。この列セットを同じ列名を持つ既存のテーブルに挿入するにはどうすればよいですか?xml.nodes()の出力をテーブルに挿入するにはどうすればよいですか?

これまで私がこれまで持っていたことは、誰かが次に行く場所を助けることができますか?

DECLARE @xml xml 
SET @xml = 
N' <Products> 
     <Product> 
     <id>4</id> 
     <name>Amy</name> 
     <age>25</age> 
     </Product> 
     <Product> 
      <id>7</id> 
      <name>Vicky</name> 
      <age>40</age> 
     </Product> 
    </Products>' 

SELECT doc.col.value('id[1]',  'nvarchar(10)')  id 
    , doc.col.value('name[1]', 'varchar(100)')  name 
    , doc.col.value('age[1]',  'nvarchar(10)')  age 
FROM @xml.nodes('/Products/Product') doc(col) 

答えて

1

が必要になる場合があります。

提案

  • 両方のフィールドが数値を表すべきであると仮定intNVARCHAR(10)からID年齢ノードに使用されるデータ型を変更することができます。

スクリプト

CREATE TABLE dbo.mytable 
( 
     id  INT   NOT NULL 
    , name VARCHAR(30) NOT NULL 
    , age  INT   NULL 
) 

DECLARE @xml xml 
SET @xml = 
N' <Products> 
     <Product> 
     <id>4</id> 
     <name>John</name> 
     <age>25</age> 
     </Product> 
     <Product> 
      <id>7</id> 
      <name>Jane</name> 
      <age>40</age> 
     </Product> 
     <Product> 
      <id>6</id> 
      <name>Jill</name> 
      <age></age> 
     </Product> 
    </Products>' 

INSERT INTO dbo.mytable (id, name, age) 
SELECT doc.col.value('id[1]',  'int')  id 
    , doc.col.value('name[1]', 'varchar(100)')  name 
    , doc.col.value('age[1]',  'int')  age 
FROM @xml.nodes('/Products/Product') doc(col); 

SELECT * FROM dbo.mytable; 

出力:これを行うの短い手の方法がある場合

id name age 
-- ------ --- 
4 John 25 
7 Jane 40 
6 Jill 0 
+0

は思っていましたか?基本的には、各ノードを行の対応する各フィールドに挿入するだけの場合は、多くのフィールドと多くのノードが一致するケースがあります。すべてのノード名とすべてのフィールド名は同じになります。 – LeeTee

+0

また、フィールドタイプを指定する必要がありますか?それは単にデータベースに入ることはできません... – LeeTee

0
INSERT INTO Table 
(
col1 
, col2 
, col3 
) 
SELECT 
doc.col.value('id[1]', 'nvarchar(10)') 
,doc.col.value('name[1]', 'varchar(100)') 
,doc.col.value('age[1]', 'nvarchar(10)') 
FROM 
    @xml.nodes('/Products/Product') doc(col) 
1

あなたは、あなたがデータを移入する希望先のテーブルのINSERTステートメントにSELECT文の出力を渡す必要があり、この

INSERT INTO YourTableName(Id,name,age) 
SELECT 
doc.col.value('id[1]', 'nvarchar(10)') id 
,doc.col.value('name[1]', 'varchar(100)') name 
,doc.col.value('age[1]', 'nvarchar(10)') age 
FROM @xml.nodes('/Products/Product') doc(col) 
関連する問題