Ari*_*ian 4 xml sql sql-server sql-server-2008
我有一个带有XML列的表,并将这样的XML保存到它:
<Employees>
<Person>
<ID>1000</ID>
<Name>Nima</Name>
<LName>Agha</LName>
</Person>
</Employees>
Run Code Online (Sandbox Code Playgroud)
我想要另一个包含列的表,在其中我使用函数Name从每行检索元素的值.这样:
Id Name
-----------------
1 Nima
2 Agha
... ...
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
谢谢
使用这样:
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))
Run Code Online (Sandbox Code Playgroud)
但
你必须提供Id从第二个表到第一个表的xml字段之间的连接
小智 5
尝试使用表值函数。
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;
Run Code Online (Sandbox Code Playgroud)
一般来说与奥列格的答案相同,但您可以将结果作为表格使用。如果重新创建示例,您将立即从 xml 表中获取所有条目。
| 归档时间: |
|
| 查看次数: |
965 次 |
| 最近记录: |