Я излагаю свою проблему на примере. На самом деле решение i foudna после многих попыток, но я хотел бы спросить, хорошо ли это решение или по какой-либо причине лучше использовать альтернативный подход. На самом деле мне нужно контролировать, как создаются элементы.Управление вложением XML-элементов с использованием FOR XML
Сначала я сделал представление, содержащее все данные, которые мне нужны, а затем я выбрал их из вида, присоединившись к виду больше.
я воспроизвел «сложность» здесь, используя локальную переменную вместо зрения:
DECLARE @Employees table(
EmpID int NOT NULL,
Name nvarchar(50),
Surname nvarchar(50),
DateOfBirth date,
DepartmentID int,
AccessLevel int);
insert into @Employees values ('1', 'John','Doe','1980-01-31',100,5)
insert into @Employees values ('2', 'Mary','Rose','1971-02-27',102,3)
insert into @Employees values ('3', 'Luke','Perry','1995-12-01',104,1)
Это желаемый результат (сотрудник, отдел и безопасность differeent элементы - моя проблема в том, чтобы создать отдел персонала и безопасности так же, как в этом примере):
<employee Name="John" Surname="Doe" DateOfBirth="1980-01-31">
<department DepartmentID="100">
<security AccessLevel="5" />
</department>
</employee>
<employee Name="Mary" Surname="Rose" DateOfBirth="1971-02-27">
<department DepartmentID="102">
<security AccessLevel="3" />
</department>
</employee>
<employee Name="Luke" Surname="Perry" DateOfBirth="1995-12-01">
<department DepartmentID="104">
<security AccessLevel="1" />
</department>
</employee>
Как я сказал, я обнаружил, что присоединение вид (здесь переменную таблицы) один раз в XML-элемент является решением:
-- declare @Employees table as above and then:
select
employee.Name,
employee.Surname,
employee.DateOfBirth,
department.DepartmentID,
security.AccessLevel from @Employees employee
join @Employees department on department.DepartmentID = employee.DepartmentID
join @Employees security on security.AccessLevel = employee.AccessLevel
for xml auto
Это дает желаемый результат.
Эта технология нескольких соединений с for xml auto
действительна или нет?
Если он производит желаемого результата, то почему она не должна быть в силе? –
Я знаю, но иногда есть устаревшие функции или лучшие практики, на самом деле принятый ответ демонстрирует гораздо лучшее решение, которое не использует joins +, дает контроль над атрибутом element vs. – LaBracca