Đơn giản hóa những gì tôi đang làm hơi, làm ví dụ, nói rằng tôi có các bảng sau:Làm cách nào để sử dụng giá trị cột làm tên phần tử xml sử dụng cho xml trong SQL Server 2005?
declare @elements table (id int, name nvarchar(20))
insert into @elements (id, name) values (1, 'FirstName')
insert into @elements (id, name) values (2, 'Surname')
insert into @elements (id, name) values (3, 'Address')
declare @values table (id int, value nvarchar(20), elementId int)
insert into @values (id, value, elementId) values (1, 'XXX', 1)
insert into @values (id, value, elementId) values (2, 'YYY', 2)
insert into @values (id, value, elementId) values (3, 'ZZZ', 3)
mà chỉ đơn giản định nghĩa một bảng tên nguyên tố đó có thể là năng động, chống lại được định nghĩa một bảng các giá trị.
Điều tôi muốn là tạo XML dưới dạng sau, trong đó các giá trị của bảng @elements trở thành tên phần tử và giá trị của bảng @values trở thành giá trị.
<Customer>
<FirstName>XXX</FirstName>
<Surname>YYY</Surname>
<Address>ZZZ<Address>
</Customer>
Tuy nhiên những nỗ lực của tôi với for xml
cho đến nay không được suông sẻ:
select e.name, v.value from @elements e
inner join @values v on v.elementId = e.id
for xml path(''), root('customer')
lợi nhuận
<customer>
<name>FirstName</name>
<value>XXX</value>
<name>Surname</name>
<value>YYY</value>
<name>Address</name>
<value>ZZZ</value>
</customer>
for xml auto
lợi nhuận
<customer>
<e name="FirstName">
<v value="XXX" />
</e>
<e name="Surname">
<v value="YYY" />
</e>
<e name="Address">
<v value="ZZZ" />
</e>
</customer>
for xml raw
trả về
<customer>
<row name="FirstName" value="XXX" />
<row name="Surname" value="YYY" />
<row name="Address" value="ZZZ" />
</customer>
Có cách nào tôi có thể lấy giá trị từ cột này sang đầu ra dưới dạng tên phần tử không? Tôi chắc rằng tôi đang thiếu một cái gì đó rõ ràng là đơn giản ở đây.
Tôi không nghĩ bạn có thể làm điều đó. Bạn có thể làm rất nhiều với các lệnh FOR XML khác nhau - nhưng trong mọi trường hợp, các tên của các phần tử XML và/hoặc các thuộc tính kết quả cần phải được cố định, ví dụ: được bạn nhập vào. Tôi không biết bất kỳ cách nào để đưa chúng ra khỏi một bảng và được gán động –