예를 통해 문제를 설명합니다. 사실 나는 여러 가지 방법으로 시도한 후에 솔루션을 foudna하지만이 솔루션이 좋은지 또는 어떤 이유로 든 다른 방법을 사용하는 것이 더 나은지 묻습니다. 사실 요소를 만드는 방법을 제어해야합니다.FOR XML을 사용하여 중첩되는 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 요소 - 내 문제는 직원의 부서를 만드는 것이었다과 단)이 예에서와 같은 보안 :
: 나는 여기 뷰 (표 변수) XML 요소에 한 번 입사하는 용액임을 알았다 말했듯<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>
-- 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
인 다중 조인의이 기술은 유효합니까?
을, 왜이 유효하지 않겠습니까? –
나도 알아,하지만 때로는 거기에 더 이상 사용되지 않는 기능이나 더 나은 관행, 사실 수용 대답은 조인을 사용하여 더 나은 솔루션을 보여줍니다 + 요소 대 속성에 대한 제어를 제공합니다 – LaBracca