0
由於含有多種類型的列一個SQL Server數據庫表,一個是XML列,我需要消化每一行的XML和呈現這些數據一個看法。
假設下表爲簡單起見:
表名:研究
列:
- StudyId(PK,INT NOT NULL)
- 名稱(nvarchar的,不空)
- 對象(XML,null)
假設1行中的以下值:
- 「研究」
- 見下文,StackOverflow上不會讓我用代碼插入,所以這裏是爲html ...
<objects>
<Group Name="Group1">
<Treatment Drug="Grp1DrugA" />
<Treatment Drug="Grp1DrugB" />
</Group>
<Group Name="Group2">
<Treatment Drug="Grp2DrugC" />
</Group>
</objects>
所需的輸出:
注:
這裏有幾個我已經試過這樣做的許多方法,我可以列出更多,如果這將是有益的。
我在這些類型的操作上讀過的大多數帖子都涉及一個聲明的xml變量。我的理解是,你不能在視圖內創建/使用變量,所以我有點卡住了。
方法1:
select stud.StudyId,
stud.Name as 'StudyName',
tbl.treatment.value('(../Group/@Name)[1]','varchar(30)') as 'Group',
tbl.treatment.value('(@Drug)[1]', 'varchar(30)') as 'Drug'
from dbo.Study stud
cross apply stud.StudyObjects.nodes('//Group/Treatment') as tbl(treatment)
這給我什麼,我Group列。
方法2:
select stud.StudyId,
stud.Name as 'StudyName',
grp.value('(@Name)[1]', 'varchar(30)') as 'Group',
treatment.value('(@Drug)[1]', 'varchar(30)') as 'Drug'
from dbo.Study stud
cross apply stud.StudyObjects.nodes('//Group') as table1(grp)
cross apply grp.nodes('//Group/Treatment') as table2(treatment)
這導致的基團/每治療組合。
這很好,謝謝。 – WyattE