我是新来的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)
您需要将输出传递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
您可能需要此
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)
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)