关于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)