如何将XML数据插入到表中的SQL Server 2005
问题描述:
我的表结构如何将XML数据插入到表中的SQL Server 2005
CREATE TABLE [dbo].[Emp](
[ID] [int] NOT NULL,
[EmpName] [varchar](50) NOT NULL,
[Sal] [int] NULL,
)
在这个表emp我想从一个XML字符串插入数据
的XML是
<Record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Emp>
<ID>3</ID><EmpName>Dibyendu</EmpName><Sal>3500</Sal></Emp></Record>
假设这个xml存储在我的存储过程中的一个变量,我只想插入这个xml,使得在EMP表中作为结果ID数据将插入到ID列中,EmpName数据将插入到EmpName列中n和Sal数据将插入到Sal列中。
所以请告诉我如何在存储过程中编写代码。
感谢
答
假设如上XML示例:
<Record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Emp>
<ID>3</ID>
<EmpName>Dibyendu</EmpName>
<Sal>3500</Sal>
</Emp>
</Record>
假设如下表:
CREATE TABLE Employee
(
[ID] [int] NOT NULL,
[EmpName] varchar(max) NOT NULL,
[Sal] [int] NULL
)
下面的存储过程,它使用XPath的,应该做的伎俩
CREATE PROCEDURE AddEmployee
@empXml xml
AS
INSERT INTO Employee
(
ID,
EmpName,
Sal
)
VALUES
(
@empXml.value('(/Record/Emp/ID)[1]', 'int'),
@empXml.value('(/Record/Emp/EmpName)[1]', 'varchar(max)'),
@empXml.value('(/Record/Emp/Sal)[1]', 'int')
)
然后你就可以执行与:
exec AddEmployee '<Record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Emp><ID>3</ID><EmpName>Dibyendu</EmpName><Sal>3500</Sal></Emp></Record>'
您需要如果记录XML可能包含多个'Emp'元素,则进行一些重构。
答
看一看像
DECLARE @Xml XML
DECLARE @Emp TABLE(
[ID] [int] NOT NULL,
[EmpName] varchar NOT NULL,
[Sal] [int] NULL
)
SELECT @Xml = '<Record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Emp><ID>3</ID><EmpName>Dibyendu</EmpName><Sal>3500</Sal></Emp></Record>'
SELECT @Xml.value('(/Record/Emp/ID)[1]', 'int') ID,
@Xml.value('(/Record/Emp/EmpName)[1]', 'VARCHAR(MAX)') EmpName,
@Xml.value('(/Record/Emp/Sal)[1]', 'int') Sal
如果你有多个行,你可以尝试这样
DECLARE @Xml XML
SELECT @Xml = '<Record><Emp><ID>3</ID><EmpName>Dibyendu</EmpName><Sal>3500</Sal></Emp><Emp><ID>4</ID><EmpName>TADA</EmpName><Sal>5</Sal></Emp></Record>'
SELECT A.B.value('(ID)[1]', 'int') ID,
A.B.value('(EmpName)[1]', 'VARCHAR(MAX)') EmpName,
A.B.value('(Sal)[1]', 'int') Sal
FROM @Xml.nodes('/Record/Emp') A(B)
非常感谢你的完整例子。 – Thomas 2011-01-21 13:28:04