首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

难题:为什么SQL SERVER合并字符串最多只能是256个字符,郁闷!该怎么解决

2012-01-30 
难题:为什么SQL SERVER合并字符串最多只能是256个字符,郁闷!示例表:createtable#aa(fsupnamevarchar(10),f

难题:为什么SQL SERVER合并字符串最多只能是256个字符,郁闷!
示例表:
create   table   #aa   (fsupname   varchar(10),fkpono   varchar(1000))
GO
insert   #aa   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '


union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po '
union   all   select   'a厂 ', 'po-234-ui-po-90 '

我的目的是将按fsupname分组合并fkpono字段值,最后结果是:
fsupname,fkpono
a厂             'po-234-ui-po   po-234-ui-po   po-234-ui-po   ……   po-234-ui-po-90

于是我使用以下语句:
declare   @fsupname   varchar(50),@fkpono   varchar(1000)
update   #AA   set  
              @fkpono=case   when   @fsupname=fsupname  
                                        then   @fkpono+ '   '+fkpono  
                                        else   fkpono   end,
              @fsupname=fsupname,
              fkpono=@fkpono

但是最多能合并到256个字符时,就不能合并了,SQL也没报错!
请教各位DX,错在地方,万分感激!

[解决办法]
显示问题,你用select len(fkpono),* from #aa 查一下就知道没错
工具-选项-结果-每行最多字符数,改256大一点就可以看到了
[解决办法]
是你定义变量时,VARCHAR指定了大小,VARCHAR最大指定为8000,你定义的小时,显示的就被截断了,如果长度大于8000,就需要别的方法了.
[解决办法]
照你写的,如果你定义VARCHAR为8000,肯定一点问题没有
[解决办法]
照你写的,如果你定义VARCHAR为8000,肯定一点问题没有


示问题,你用select len(fkpono),* from #aa 查一下就知道没错
工具-选项-结果-每行最多字符数,改256大一点就可以看到了


加一行
print @fsupname
print fkpono
就知道错没错
[解决办法]
varchar 类型为8000 是最大期限了,sql 2005 中的varchar(max)等价于varchar(8000)

热点排行