2017-01-26 1 views
0

Le point indiquant pour cette qusetion est Control on XML elements nesting using FOR XMLSql pour xml: comment éviter un champ spécifique est sortie en tant qu'attribut?

Je voudrais que les changements de sortie de

<security AccessLevel="5" /> 

à

<security>5<security/> 

Fondamentalement, au lieu d'afficher AccessLevel comme attribut je voudrais sa valeur devient la valeur de l'élément security. Comment atteindre un tel résultat. je copie ici l'exemple du poste lié pour plus de clarté:

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) 

select 
    employee.Name, 
    employee.Surname, 
    employee.DateOfBirth, 
    department.DepartmentID, 
    security.AccessLevel -- THIS IS THE INVOLVED FIELD 
from @Employees employee 
join @Employees department on department.DepartmentID = employee.DepartmentID 
join @Employees security on security.AccessLevel = employee.AccessLevel 
for xml auto 

Répondre

3

je referais ce en utilisant @ dans le nom d'alias pour générer le attributes dans xml. Pour obtenir le accesslevel comme élément simplement ne pas ajouter à @ nom d'alias

Quelque chose comme ça

SELECT NAME   AS [@Name], 
     Surname  AS [@Surname], 
     DateOfBirth AS [@DateOfBirth], 
     DepartmentID AS [department/@DepartmentID], 
     AccessLevel AS [department/security] 
FROM @Employees 
FOR xml path('employee') 

Résultat:

<employee Name="John" Surname="Doe" DateOfBirth="1980-01-31"> 
    <department DepartmentID="100"> 
    <security>5</security> 
    </department> 
</employee> 
<employee Name="Mary" Surname="Rose" DateOfBirth="1971-02-27"> 
    <department DepartmentID="102"> 
    <security>3</security> 
    </department> 
</employee> 
<employee Name="Luke" Surname="Perry" DateOfBirth="1995-12-01"> 
    <department DepartmentID="104"> 
    <security>1</security> 
    </department> 
</employee>