Значение и ТИП в XML ПУТИ - PullRequest
       4

Значение и ТИП в XML ПУТИ

1 голос
/ 19 апреля 2020

У меня есть следующий запрос, чтобы получить имя всех сотрудников в формате XML:

SELECT ' ,' +de.Firstname 
              FROM dbo.Employee de
              FOR XML PATH ('')

Я хочу понять, в чем разница, если я обновлю его ниже:

  SELECT (SELECT ' ,' +de.Firstname 
              FROM dboDimEmployee de
              FOR XML PATH (''),TYPE).value('.[1]', 'NVARCHAR(MAX)');

Что означают TYPE и value()?

1 Ответ

1 голос
/ 19 апреля 2020

TYPE означает, что подзапрос возвращает значение XML тип данных вместо строки.

Затем .value вызывает метод для типа данных XML, чтобы получить значение элемента в виде строки.

Причина, по которой второй предпочтительнее первого, заключается в случай, когда результат конкатенации содержит такие символы, как <. Они будут отображаться как желаемые в конечном результате, а не как необработанные XML объекты, такие как &lt;

SELECT 'John' AS Firstname into #TEMP UNION ALL SELECT 'Jack <&>'   

SELECT ' ,' +de.Firstname -- ,John ,Jack &lt;&amp;&gt;
              FROM #TEMP de
              FOR XML PATH ('')


SELECT (SELECT ' ,' +de.Firstname -- ,John ,Jack <&>
              FROM #TEMP de
              FOR XML PATH (''),TYPE).value('.[1]', 'NVARCHAR(MAX)');

Второй ведет себя так же, как

SELECT CAST(',John ,Jack &lt;&amp;&gt;' AS XML).value('.[1]', 'NVARCHAR(MAX)');

(По Кстати, если вы запустите их в SSMS, вы можете быть удивлены тем, что результатом первого на самом деле является строка, так как она выглядит как интерактивная XML в виде сетки, но это связано со специальным регистром неявного имени столбца XML_F52E2B61-18A1-11d1-B105-00805F49916B not тип данных)

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