0

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

3 回答 3

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 回答
1

您需要将SELECT语句的输出传递给INSERT您希望将数据填充到其中的表的语句。

建议

  • 您可以将用于idage节点的数据类型从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 回答
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 回答