Поддерживает ли XML AUTO то, что я пытаюсь сделать? - PullRequest
0 голосов
/ 02 ноября 2009

В настоящее время у нас есть денормализованная база данных. т.е.

Name|NameID|EmployeeID|EmployeeType

Я нормализую базу данных для разрешения EmployeeID из таблицы Employee, а не из таблицы имен.

Итак, у нас есть выбор на данный момент

SELECT Name, NameID, EmployeeID, EmployeeType FROM Name 
FOR XML AUTO

Который выдаст:

 <Name Name='Fred' NameID='1' EmployeeID='1' EmployeeType='Manager'>

Теперь у меня есть ВНУТРЕННЕЕ СОЕДИНЕНИЕ

SELECT Name, NameID, Name.EmployeeID, Employee.EmployeeType FROM Name
INNER JOIN Employee ON Name.EmployeeID = Employee.EmployeeID
FOR XML AUTO

Теперь мой XML выглядит так:

<Name Name='Fred' NameID='1' EmployeeID='1'>
  <Employee EmployeeType='Manager' />
</Name>

У меня вопрос: есть ли способ заставить XML AUTO выводить мой XML, как раньше, или мне нужно перейти к явному XML?

1 Ответ

1 голос
/ 02 ноября 2009

Можете ли вы использовать FOR XML PATH вместо ?? Это дает вам гораздо больший контроль над макетом вашего XML, и это НАМНОГО ЛЕГКО , чем XML EXPLICIT! : -)

SELECT 
   Name as '@Name', 
   NameID as '@NameID', 
   Name.EmployeeID as '@EmployeeID', 
   Employee.EmployeeType as '@EmployeeType'
FROM Name
INNER JOIN Employee ON Name.EmployeeID = Employee.EmployeeID
FOR XML PATH('Name')

PATH('Name') определяет, что весь элемент должен быть элементом <Name>, и если вы используете псевдоним для столбцов с начальным @, вы получите атрибуты (без начального "@" вы получите подэлементы) .

Ознакомьтесь со статьей MSDN о Что нового в SQL Server 2005 XML , чтобы получить дополнительные сведения и примеры.

Марк

...