文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 国产软件 | 国外软件 | 汉化补丁 | 设为首页 | 加入收藏
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网站建设 | 技术开发 | 专栏
当前位置:abcdown网络学院网络编程MSSQL快速掌握化解字符串不能超过8000的方法
精品广告
推荐TOP10
·SQL SERVER 2005 同步复制技术
·开启sql server 2005的远程访问功能
·SQL Server连接失败错误故障的分析与排除
·SQL server 2005安装问题汇总
·Sql server优化50法
·SQL Server 2005 中的分区表和索引
·SQL Server不存在或访问被拒绝 问题的解决
·在SQL Server 2000里设置和使用数据库复制
·sql 经典语句
·SQL Server企业管理器和查询分析器简介
阅读TOP10
·用SQL一次插入多条数据
·SQL server 2005安装问题汇总
·SQL Server 2005 中的分区表和索引
·SQL Server 2005 Express Edition安装步骤详解
·sql server日期时间函数
·sql 经典语句
·SQL Server安装文件挂起错误解决办法
·在SQL Server 2000里设置和使用数据库复制
·SQL Server不存在或访问被拒绝 问题的解决
·JSP中tomcat的SQL Server2000数据库连接池的配置

快速掌握化解字符串不能超过8000的方法

日期:2007年8月8日 作者: 查看:[大字体 中字体 小字体]


经常有人提到,用动态生成SQL语句的方法处理数据时,处理语句超长,无法处理的问题。

下面我们来讨论这个问题:

/*-- 数据测试环境 --*/
if exists (select * from dbo.sysobjects
where id = object_id(N'[tb]') and
OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [tb]
GO
create table tb(单位名称 varchar(10),
日期 datetime,销售额 int)
insert into tb
select 'A单位','2001-01-01',100
union all select 'B单位','2001-01-02',101
union all select 'C单位','2001-01-03',102
union all select 'D单位','2001-01-04',103
union all select 'E单位','2001-01-05',104
union all select 'F单位','2001-01-06',105
union all select 'G单位','2001-01-07',106
union all select 'H单位','2001-01-08',107
union all select 'I单位','2001-01-09',108
union all select 'J单位','2001-01-11',109
/*-- 要求结果
日期 A单位 B单位 C单位 D单位 E单位
---------- ----- ----- ----- -----
 F单位 G单位 H单位 I单位 J单位
----- ----- ---- ---- ---- ------
2001-01-01 100 0 0 0 0 0 0 0 0 0
2001-01-02 0 101 0 0 0 0 0 0 0 0
2001-01-03 0 0 102 0 0 0 0 0 0 0
2001-01-04 0 0 0 103 0 0 0 0 0 0
2001-01-05 0 0 0 0 104 0 0 0 0 0
2001-01-06 0 0 0 0 0 105 0 0 0 0
2001-01-07 0 0 0 0 0 0 106 0 0 0
2001-01-08 0 0 0 0 0 0 0 107 0 0
2001-01-09 0 0 0 0 0 0 0 0 108 0
2001-01-11 0 0 0 0 0 0 0 0 0 109
--*/
/*-- 常规处理方法 declare @sql varchar(8000) set @sql='select 日期=convert(varchar(10),日期,120)' select @sql=@sql+',['+单位名称 +']=sum(case 单位名称 when '''+单位名称+''' then 销售额 else 0 end)' from(select distinct 单位名称 from tb) a exec(@sql+' from tb group by convert(varchar(10),日期,120)') --*/

问题

如果单位很多,这时,@SQL的值就会被截断,从而出错。

下面给出两种解决办法:

方法1. 多个变量处理

--定义变量,估计需要多少个变量才能保存完所有数据
declare @sql0 varchar(8000),@sql1 varchar(8000)
--,...@sqln varchar(8000)
--生成数据处理临时表
select id=identity(int,0,1),groupid=0
,值=',['+单位名称 +']=sum(case 单位名称 when '''
+单位名称+''' then 销售额 else 0 end)'
into #temp from(select distinct 单位名称 from tb) a
--分组临时表,判断慨最多多少个单位可
以组合成一个不超过8000的字符串,

[1] [2] [3] 下一页 

上一篇:SQL Server与Oracle并行访问的本质区别

下一篇:教你清除Oracle中无用的索引改善DML


相关软件: 相关文章:
·目前中国最快最好用的XP系统 天宇7.5版美化GHOST XP
·快乐斗地主单机06版
·《倪新威快速记忆法》完整清晰版
·GHOST WINDOWS-SP2 感觉系统很快 GHO 621M
·火热吉他 轻快悦耳 吉卜赛情怀
·抗遗忘快速记忆法
·东方快车 2003 简体中文零售版
·激情聊天原来有陷阱!快来揭露视频MM的真面目
·手淫的生理快感
·为Windows XP添加快速启动项
·QQ空间FLASH模块:生日快乐集
·如何删除操作系统桌面快捷方式箭头
·魔兽世界:战士快速升级指南
·水浒Q传:召唤兽被动技能点正确快速升级法

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
首页 | 本站声明 | 下载帮助 | 发布软件 |
中文版权所有:ABC学院 浙ICP备05000717号