Sql for xml: 如何避免特定字段作为属性输出?
Sql for xml: how to avoid a specific field is output as attribute?
这个问题的陈述点是
我希望输出从
<security AccessLevel="5" />
到
<security>5<security/>
基本上,我不希望将 AccessLevel
显示为属性,而是希望它的值成为元素 security
的值。
如何达到这样的结果。
为了清楚起见,我在此处复制链接 post 中的示例:
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
我会在别名中使用 @
来生成 xml
中的 attributes
。要获得 accesslevel
作为元素,不要将 @
添加到别名
像这样
SELECT NAME AS [@Name],
Surname AS [@Surname],
DateOfBirth AS [@DateOfBirth],
DepartmentID AS [department/@DepartmentID],
AccessLevel AS [department/security]
FROM @Employees
FOR xml path('employee')
结果:
<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>
这个问题的陈述点是
我希望输出从
<security AccessLevel="5" />
到
<security>5<security/>
基本上,我不希望将 AccessLevel
显示为属性,而是希望它的值成为元素 security
的值。
如何达到这样的结果。
为了清楚起见,我在此处复制链接 post 中的示例:
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
我会在别名中使用 @
来生成 xml
中的 attributes
。要获得 accesslevel
作为元素,不要将 @
添加到别名
像这样
SELECT NAME AS [@Name],
Surname AS [@Surname],
DateOfBirth AS [@DateOfBirth],
DepartmentID AS [department/@DepartmentID],
AccessLevel AS [department/security]
FROM @Employees
FOR xml path('employee')
结果:
<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>