SQL Server2005 使用FOR XML选项进行字符串的串联聚合
生活随笔
收集整理的這篇文章主要介紹了
SQL Server2005 使用FOR XML选项进行字符串的串联聚合
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
使用FOR XML查詢選項的PATH模式,可以用于字符串的串聯聚合,并且可以很方便地組織聚合后的文本描述。
先看看下面的節選:
?
with?arg1?as(
????select?top?10?[lt_username],(
????????select?CAST(n2.room?as?nvarchar(128)?)+':'+CAST(n2.point?as?nvarchar(8))+','?as?[text()]
????????from?[newbbspoints]?n2
????????where?n2.lt_username?=?n1.lt_username
????????order?by?n2.point?desc?
????????for?xml?path('')
????)?as?[Description]
????from?dbo.[newbbspoints]?as?n1?
)
select?[lt_username],?stuff([Description],?Len([Description]),?1,?'')?as?[Description]?from?arg1
?
使用for xml path('')提供了一個空字符串作為輸入,所以未產生包裝器(wrapper)元素,
通過CAST(n2.room?as?nvarchar(128)?)+':'+CAST(n2.point?as?nvarchar(8))+','
可以利用各列的數據來串聯出此字段的描述。
其中使用stuff截取最后一個生成的分割符','
以下的例子利用一個已在存在表的數據去更新另外一下表,更新的字段內容為第一個表的兩個字段的字符串串聯。
if?object_id('dbo.BBSPoints')?is?not?null????drop?table?dbo.BBSPoints
if?object_id('dbo.CJB_Temp')?is?not?null
????drop?table?dbo.CJB_Temp;????
create?table?????dbo.BBSPoints
(
????lt_username????nvarchar(20)?not?null,
????room????nvarchar(128)?not?null,
????point?int
)
insert?into?dbo.BBSPoints(lt_username,room,point)?values(N'zdg',N'社區支持',2734);
insert?into?dbo.BBSPoints(lt_username,room,point)?values(N'zdg',N'擴充話題',2734);
insert?into?dbo.BBSPoints(lt_username,room,point)?values(N'billok',N'產品/廠家',654);
insert?into?dbo.BBSPoints(lt_username,room,point)?values(N'billok',N'MS-SQL?Server',45);
insert?into?dbo.BBSPoints(lt_username,room,point)?values(N'junbiaochen',N'C#',785);
insert?into?dbo.BBSPoints(lt_username,room,point)?values(N'junbiaochen',N'asp.net',265);
create?table?dbo.CJB_Temp
(
????UserName????nvarchar(20)?not?null?primary?key,
????Title????nvarchar(256)
)
insert?into?dbo.CJB_Temp(UserName,Title)?values(N'zdg',N'');
insert?into?dbo.CJB_Temp(UserName,Title)?values(N'billok',N'');
insert?into?dbo.CJB_Temp(UserName,Title)?values(N'junbiaochen',N'');
with?arg1?as
(
????select?[lt_username],(
????????select?CAST(n2.room?as?nvarchar(128)?)+':'+CAST(n2.point?as?nvarchar(8))+','?as?[text()]
????????from?dbo.[BBSPoints]?n2
????????where?n2.lt_username?=?n1.lt_username
????????order?by?n2.point?desc?
????????for?xml?path('')
????)?as?[Description]
????from?dbo.[BBSPoints]?as?n1
)
,arg2?as
(
????select?[lt_username],?stuff([Description],?len([Description]),?1,?'')?as??[Description]?from?arg1
)
update?t
????set?[Title]?=?a2.[Description]
????from?dbo.[CJB_Temp]?t
????????join?arg2?a2?on?a2.[lt_username]?=?t.[UserName]
select?*?from?dbo.[CJB_Temp];
drop?table?dbo.[BBSPoints];
drop?table?dbo.[CJB_Temp];
轉載于:https://www.cnblogs.com/chenjunbiao/archive/2008/08/19/1760203.html
總結
以上是生活随笔為你收集整理的SQL Server2005 使用FOR XML选项进行字符串的串联聚合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置windows 2008 作为远程访
- 下一篇: [ASP.NET 控件实作 Day14]