读书人

关于SQL 交叉表的有关问题郁闷好几天

发布时间: 2013-08-04 18:26:15 作者: rapoo

关于SQL 交叉表的问题,郁闷好几天了。
表名:szmxb
表结构如下:
bh 部门编号 部门名称 xm_No xm_Name ic_Hzje
1111001内一科S009心电图150
1111006内二科S001挂号费152
1212008门诊灸疗科S089非药物治疗496
1212032体检办S020化验费1066
1212032体检办S012放射费891
1111003外科S078救护车470
1111001内一科S006彩超费679
1212027门诊收费处S106预收住院单据18
1212032体检办S009心电图25
1212032体检办S005B超费29

这个表是一个视图,是动态生成的,做为交叉表的数据来源,有700多行
生成交叉表的代码如下:

Declare @s Varchar(8000) Set @s='Select bh,部门编号,部门名称 '
Select @s=@s+',['+Xm_No+']=Sum(case Xm_No when '''+Xm_No+''' then IC_hzje else 0 end)'
From szmxb Group By Xm_No Order By Xm_No
exec(@s+' From szmxb Group by 部门编号,部门名称,bh Order By 部门编号 ')

在执行时,提示如下错误:

服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'From' 附近有语法错误。


把该表的行删除一些,却又能执行,不知道是什么原因,还请大侠们指点一下。

数据库备份下载地址:
http://www.zdasoft.cn/update/aaaa.zip

[解决办法]
varchar的最大长度是8000,而我们打印出来什么发现长度只到4048就没有了呢?

原来问题在你的数据设计里 XM_No nvarchar(50)
nvarchar是双字节,最大长度就是4048,因为字符中包含有nvarchar类型,所以只能按nvarchar的最大长度计算

解决你的问题就是把
XM_No nvarchar(50)
改为
XM_No varchar(50)

读书人网 >SQL Server

热点推荐