[英]Creating XML structure with SQL Server
我正在嘗試為使用.xml
格式的文件的演示軟件的某些版本的翻譯提供聖經。
我想創建這個結構的 xml 文件:
<Bible>
<book name="Gênesis" abbrev="gn" nchapters="50" >
<chapter n="1">
<verse n="1"> No princípio criou Deus o céu e a terra.</verse>
<verse n="2"> A terra era sem forma e vazia; [...] a face das águas.</verse>
<verse n="3"> Disse Deus: haja luz. E houve luz.</verse>
</chapter>
<chapter n="2">
[...]
</book>
<book name="Êxodo" abbrev="êx" nchapters="40" >
<chapter n="1">
<verse n="1"> No princípio criou Deus o céu e a terra.</verse>
<verse n="2"> A terra era sem forma e vazia; [...] a face das águas.</verse>
<verse n="3"> Disse Deus: haja luz. E houve luz.</verse>
</chapter>
<chapter n="2">
[...]
</book>
[...]
</Bible>
我有 2 張桌子:“書”、“詩”。
圖書
Book_id | 姓名 | 縮寫 | 章節 |
---|---|---|---|
1 | 創世紀 | Gn | 50 |
2 | 鯰魚 | 前任 | 40 |
... | ... | ... | ... |
詩句
ID | 書 | 章節 | 詩 | 文本 |
---|---|---|---|---|
1 | 創世紀 | 1 | 1 | No princípio criou Deus os céus... |
2 | 創世紀 | 1 | 2 | 知乎... |
... | ... | ... | ... | ... |
1534 | 鯰魚 | 1 | 1 | 知乎... |
我無法在生成此結構的 SQL 查詢中編寫代碼。 獲得解決此問題的代碼的任何幫助將不勝感激。
謝謝!
您可以使用FOR XML生成 XML,其中包含每個嵌套元素和屬性的子查詢。
select
b.name as '@name',
b.abbrev as '@abbrev',
b.chapters as '@nchapters',
(select
v.chapter as '@n',
(select
d.verse as 'verse/@n',
d."text" as 'verse'
from Verses d
where b.name = d.book
and d.chapter = v.chapter
for xml path(''), TYPE
)
from Verses v
where b.name = v.book
group by v.chapter
for xml path('chapter'), TYPE
)
from Books b
for xml path('book'), TYPE, ROOT('Bible')
db<>fiddle here 。
輸入:
Book_id | 姓名 | 縮寫 | 章節 | ID | 書 | 章節 | 詩 | 文本 |
---|---|---|---|---|---|---|---|---|
1 | 創世紀 | Gn | 50 | 1 | 創世紀 | 1 | 1 | No princípio criou Deus os céus... |
1 | 創世紀 | Gn | 50 | 2 | 創世紀 | 1 | 2 | 知乎... |
1 | 創世紀 | Gn | 50 | 3 | 創世紀 | 2 | 1 | 測試第 1 節... |
2 | 鯰魚 | 前任 | 40 | 4 | 鯰魚 | 1 | 1 | 測試第2節... |
Output:
<Bible>
<book name="Gênesis" abbrev="Gn" nchapters="50">
<chapter n="1">
<verse n="1">No princípio criou Deus os céus...</verse>
<verse n="2">E a terra era sem forma e vazia...</verse>
</chapter>
<chapter n="2">
<verse n="1">Test Verse 1...</verse>
</chapter>
</book>
<book name="Êxodo" abbrev="Êx" nchapters="40">
<chapter n="1">
<verse n="1">Test Verse 2...</verse>
</chapter>
</book>
</Bible>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.