使用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选项进行字符串的串联聚合相关推荐

  1. 转: 利用SQL SERVER2005的XML字段类型实现类似商品扩展属性

    今天自己翻了两页自己的BLOG,发现真是越来越懒了,已经好长时间没有写技术相关的日志了,记得刚开始写BLOG的时候还经常写写自己的技术积累的,现在除了发布ZJ-BLOG的程序更新信息外,好像全成了自己 ...

  2. SQL Server2005 日期字段与字符串比较的怪异问题

    遇到了这样一个怪异问题. SQL Server2005数据库里有一个表,表中有一个DateTime类型的字段CreateDate. 如果在SQL语句里写 where CreateDate <= ...

  3. Sql Server2005 Transact-SQL 新兵器学习总结之-数据类型

    sql server2005新增加了2大数据类型: 1.大值数据类型 2.xml 1.大值数据类型 Microsoft SQL Server 2005 中引入了 max 说明符.此说明符增强了 var ...

  4. sql server2005 无法修改表,超时时间已到 在操作完成之前超时时

    在sql server2005 中,在修改表时,保存的时候显示:无法修改表,超时时间已到 在操作完成之前超时时间已过或服务器未响应  这是执行时间设置过短的原因,可以修改一下设置便能把执行时间加长,以 ...

  5. java与sql2005连接数据库_Java链接数据库SQl Server2005

    Java链接数据库SQL Server2005步骤: 1.到微软官方网站下载2005的jdbc并解压,获得文件sqljdbc.jar.本人使用的是sqljdbc_1.2,解压后即为该文件. sql j ...

  6. 使用WCF传输DataTable:DataTable和Xml格式的字符串相互转换(C#)

    背景:项目中要用到客户端向服务端传数据,使用WCF,绑定webHttpBinding,做了一个小例子. 业务逻辑简介:客户端在a表中添加了几条数据,从SQL Server数据库直接取出新添加的数据(D ...

  7. SQL Server2005如何进行数据库定期备份(转)

    SQLServer2005的定期备份是通过创建"维护计划"来实现的.主要有两种方式:1.维护计划向导.2.新建维护计划(用户手工创建) 如果想在SQLServer2005中使用维护 ...

  8. sql server中对xml进行操作

    一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...

  9. Sql Server2005对t-sql的增强之Cross Apply

    Sql Server2005对t-sql的增强之Cross Apply Cross Apply使表可以和表值函数结果进行join,在下面的示例中建了两个表和一个表值函数,T_b的列a_ids中会存放a ...

最新文章

  1. Request请求用Cookie记录SessionId
  2. matlab为曲线下面积上色
  3. 如何检查字符串是否为空?
  4. python进阶(小白也能看懂)——装饰器浅谈(一)
  5. 1003. 检查替换后的词是否有效
  6. LCT模板(无讲解)
  7. iOS开发 - iOS10隐私数据访问问题
  8. 为什么戏说php,PHP语言之戏说PHP框架的味道
  9. 一步一步使用阿里云容器服务部署基于.NET的JEXUS网站 (转)
  10. QGIS教程02---QGIS加载数据的4种方法
  11. 四川多多开店:拼多多如何检查聊天记录
  12. excel自动调整列宽_Excel教程:A股上了3000点,来张股市涨跌图
  13. int数据超出范围的值变化
  14. 三维尺寸链计算和公差分析软件-DTAS-功能
  15. Angular CLI简介
  16. 基于CentOS7操作cobbler批量装机-(centos7和redhat8)
  17. 记录下如何用vue实现PC端网易云轮播图效果
  18. 计算机毕业设计Java城市智能公交系统(源码+系统+mysql数据库+lw文档)
  19. cass光标大小怎么调_CAD如何调整十字光标和靶框大小
  20. 网页如何与小程序交互通信

热门文章

  1. Bugzilla/使用
  2. 用Python操作Redis
  3. 一个页面是否应该全部组件化
  4. Bootstrap插件
  5. LightOJ 1370 - Bi-shoe and Phi-shoe
  6. 【90】沟通:跨部门管理
  7. 九度oj 题目1537:买卖股票
  8. PHP第六课 使用方法数组
  9. linux 下 读取某个文件的某一行或者某几行
  10. Android模拟器慢的解决办法