我要如何插入从xml.nodes()输出到表?(How do I insert output fro

2019-10-29 03:25发布

我是新来的SQL Server,我试图将行插入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)

Answer 1:

您需要将输出传递SELECT语句的INSERT表的语句,你想成为其中填充数据。

建议

  • 您可以更改用于ID年龄节点从为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


Answer 2:

您可能需要此

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)


Answer 3:

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)


文章来源: How do I insert output from xml.nodes() into a table?