【发布时间】:2009-10-27 13:58:00
【问题描述】:
假设我将 xml 存储在数据库中。它包含一个联系人列表,如下所示:
<Person>
<Name>Irwin</Name>
<Address>Home, In a place</Address>
<Contact type="mobile">7771234</Contact>
<Contact type="home">6311234</Contact>
<Contact type="work">6352234</Contact>
<Contact type="fax">6352238</Contact>
</Person>
它存储在 sql server 数据库的一个 xml 列中,在一个具有这种结构的表中:
TABLE [Contacts](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Info] [xml] NOT NULL,
[Status] [tinyint] NOT NULL,
[CreateTime] [datetime] NOT NULL,
) ON [PRIMARY]
我想编写一个查询,将联系人元素转换为新表的行,与联系人表的 ID 字段匹配。
我试过了:
SELECT Cast(Request.query('/Person/Contact/text()') as varchar(100)) as [Number], ID
FROM Contacts
但它会从列中的给定 xml 片段中提取所有数据,并将它们与该行的 ID 一起放在一行中,如下所示:
编号、ID
7771234631123463522346352238, 1500
什么时候我想得到的是:
编号、ID
7771234, 1500
6311234, 1500
6352234, 1500
6352238, 1500
你能指出我正确的方向吗?
【问题讨论】:
-
除了接受的答案之外,这很有帮助:blog.beyondrelational.com/2007/11/…
标签: sql-server xml