0

私はSQLサーバーを初めて使用し、XMLドキュメントからデータベースに行を挿入しようとしています。私はいくつかの調査を行い、XML ノード関数を使用して XML を行セットに入れることができました。しかし、私は次に何をすべきかわかりません。この行セットを同じ列名を持つ既存のテーブルに挿入するにはどうすればよいですか?

以下は私がこれまでに持っているものです。次にどこに行くべきか誰か助けてもらえますか?

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

3 に答える 3

1

SELECTステートメントの出力をINSERT、データを入力するテーブルのステートメントに渡す必要があります。

提案

  • idノードとageノードに使用されるデータ型をnvarchar(10)からint、両方のフィールドが数値を表すと想定するように変更できます。

スクリプト

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
于 2012-05-01T12:08:43.433 に答える
1

これが必要かもしれません

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)
于 2012-05-01T11:32:15.480 に答える
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)
于 2012-05-01T11:19:13.220 に答える