我在SQL Server 2008中有一個表,它將XML數據存儲在XML列中。一個典型的XML片段是:SQL - 使用INNER JOIN獲取XML,修改XML
<validation>
<Field1 author="56234" date="20120101" />
<Field2 author="23232" date="20120101" />
[...etc...]
</validation>
我正在試圖找出 - 我看不出怎麼辦呢 - 是與內選擇這個數據JOIN到另一個表並修改XML數據在結果集中,即,讓我得到這個:
<validation>
<Field1 author="56234" date="20120101" authorFullName="Bob Smith" />
<Field2 author="23232" date="20120101" authorFullName="Jane Hill" />
[...etc...]
</validation>
現在我知道我可以做一個CROSS APPLY
將XML數據直接拉入一個記錄和內部聯接 - 例如使用:
select xmldata.a, people.personname
from xmldata
cross apply xmldata.x.nodes('/validation/node()') vdata(fielddata)
inner join people
on people.personid = vdata.fielddata.value('@author','NVARCHAR(20)')
但我真的在做什麼lly想要做的是返回原始的XML,但添加了一個新屬性,將people.PersonName映射到新的@authorFullName屬性中。
我不能完全弄清楚語法(或者即使它確實有可能)。我假設我最好cross apply
做modify
與insert attribute
- 基於
select xmldata.a, xmldata.x
from xmldata
cross apply xmldata.x.modify('insert attribute authorFullName {sql:column("people.personfullname")} into /validation/node()')
inner join people
on people.personid = [...what goes here?...]
,但得到的語法權逃脫我的東西。我越來越認爲這是不可能的,而且我最好在兩個查詢中完成這項工作,並將結果合併到非SQL業務邏輯中。
我設法在文檔中錯過了。顯然很多時間盯着他們。儘管在處理XML方面,考慮到在SQL層面涉及的工作,我可能會更好地將單獨的數據集拉回到業務代碼中並在那裏合併。感謝您的反饋,雖然...! –