【发布时间】:2017-06-12 03:25:29
【问题描述】:
我举例说明我的问题。事实上,我在尝试了多种方式后找到了解决方案,但我想问一下这个解决方案是否好,或者出于任何原因,使用替代方法是否更好。 事实上,我需要控制元素的创建方式。
我首先创建了一个包含我需要的所有数据的视图,然后我通过多次加入视图从视图中进行选择。
我在这里使用局部变量而不是视图重现了“复杂性”:
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)
这是期望的结果(员工、部门和安全是不同的元素——我的问题是像在这个例子中一样创建员工部门和安全):
<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 进行多次连接的技术是否有效?
【问题讨论】:
-
如果它产生了预期的结果,为什么它不应该是有效的?
-
我知道,但有时会有不推荐使用的功能或更好的做法,事实上,接受的答案展示了一个更好的解决方案,它不使用连接 + 控制元素与属性
标签: sql-server xml sql-server-2008-r2 for-xml