سؤال
لنقول أن لدينا جدول "أسماء":
ID Name Surname
1 Matt Smith
2 John Doe
كيف تكتب بعض sqlxml لإنشاء هذا:
<people>
<person>
<name>Matt</name>
<surname>Smith</surname>
<person>
<person>
<name>John</name>
<surname>Doe</surname>
<person>
</people>
أفضل ما لدي هو:
select r.value('Name[1]', 'nvarchar(10)'), r.value('Surname[1]', 'nvarchar(10)')
from Names
for xml path('people')
الذي يعطيني:
<people>
<name>Matt</name>
<surname>Smith</surname>
</people>
<people>
<name>John</name>
<surname>Doe</surname>
</people>
باختصار ، كيف يمكنني لف كلها؟
المحلول
جرب هذا:
SELECT
Name,
Surname
FROM
dbo.Names
FOR XML PATH('person'), ROOT('people')
ال FOR XML PATH
يحدد العلامة لتطويق كل صف فردي ، بينما FOR XML ... ROOT
يحدد عنصر الجذر المحيط بجمع الصفوف.
نصائح أخرى
إذا كنت تريد أن تفعل هذا بطريقة XML ،
يمكنك الحصول على متغير ،
Declare @XMLOP xml
SET @XMLOP = '<people></people>'
set @XMLOP.modify('
insert (select r.value('Name[1]', 'nvarchar(10)'), r.value('Surname[1]', 'nvarchar(10)')
from Names
for xml path('Person'))
after (/people)[1]
');
SELECT @XMLOP;
لا تنتمي إلى StackOverflow