我有一个带有XML
列的表,并将这样的XML保存到它:
<Employees>
<Person>
<ID>1000</ID>
<Name>Nima</Name>
<LName>Agha</LName>
</Person>
</Employees>
我想要另一个包含列的表,其中我使用函数从每行检索Name
元素的值。这样:
Id Name
-----------------
1 Nima
2 Agha
... ...
我怎么能这样做?
感谢
答案 0 :(得分:5)
像这样使用:
CREATE FUNCTION dbo.GetName(@xml XML)
RETURNS NVARCHAR(MAX)
WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
RETURN @xml.value('/Employees[1]/Person[1]/Name[1]', 'nvarchar(max)')
END
GO
SELECT dbo.GetName(CAST(N'
<Employees>
<Person>
<ID>1000</ID>
<Name>Nima</Name>
<LName>Agha</LName>
</Person>
</Employees>' AS XML))
<强>但是强>
您必须提供第二个表格中的Id
字段与第一个表格中的xml字段之间的连接
答案 1 :(得分:4)
尝试使用表值函数。
CREATE FUNCTION dbo.GetTableFromXML(@xml XML)
RETURNS @retXMLTable TABLE
(
-- Columns returned by the function
ID int PRIMARY KEY NOT NULL,
Name nvarchar(max) NULL,
LName nvarchar(max) NULL,
)AS
BEGIN
INSERT @retXMLTable (ID,FirstName,LName)
select @xml.value('/Employees[1]/Person[1]/ID[1]', 'nvarchar(max)'),
@xml.value('/Employees[1]/Person[1]/Name[1]', 'nvarchar(max)')
@xml.value('/Employees[1]/Person[1]/LName [1]', 'nvarchar(max)')
RETURN;
END;
与Oleg的回答大致相同,但是您可以将结果作为表格进行处理。如果重新创建样本,则可以立即从xml表中获取所有条目。