Как использовать функцию sql для вычисляемого столбца для получения значения из XML - PullRequest
4 голосов
/ 16 января 2012

У меня есть таблица со столбцом XML, и я сохраняю в нем XML-код:

<Employees>
    <Person>
        <ID>1000</ID>
        <Name>Nima</Name>
        <LName>Agha</LName>
    </Person>   
</Employees>

Я хочу иметь другую таблицу со столбцами, в которой я использую функцию для получения значенияName элемент из каждой строки. Например:

  Id           Name
  -----------------
  1            Nima
  2            Agha
  ...          ...

Как я могу это сделать?

спасибо

Ответы [ 2 ]

5 голосов
/ 16 января 2012

Используйте вот так:

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 из первого

4 голосов
/ 16 января 2012

Попробуйте использовать табличную функцию.

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;

Обычно такой же ответ, как и у Олега, но вы можете работать с результатом в виде таблицы. Если вы воссоздаете образец, вы сразу получите все свои записи из таблицы xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...