日期:2014-05-18  浏览次数:20636 次

exec 后支持的字符串长度 重发一下
SQL code

    declare @result varchar(8000)     -- 保存项目组合的字符串    
   declare @mysql  varchar(8000)
    select @result=''      
   select @mysql=''      
 If object_id('tempdb..#xmtmp') is not null drop table #xmtmp      
 If object_id('tempdb..##tjbb') is not null drop table ##tjbb      

   Create table #xmtmp (科室名称 varchar(20))      
  insert into #xmtmp select distinct 执行科室 as 科室名称 from zxks order by 执行科室       
      
  select @result=@result+rtrim(科室名称)+' decimal(18,2),' from #xmtmp      
  select @mysql='create table #tjbb (医师姓名 varchar(20),'+@result+'药占比 decimal(18,2),合计 decimal(18,2))'

  exec @mysql
  go
    
  declare @mysql  nvarchar(4000)
  select @mysql=' create table #tjbb (医师姓名 varchar(20),B超室 decimal(18,2),CT室 decimal(18,2),病理科 decimal(18,2),草药房 decimal(18,2),草药房2 decimal(18,2),草药库 decimal(18,2),肠道门诊 decimal(18,2),肠道药房 decimal(18,2),儿保科 decimal(18,2),儿科 decimal(18,2),耳鼻喉科 decimal(18,2),发热门诊 decimal(18,2),放射科 decimal(18,2),妇保门诊 decimal(18,2),妇科 decimal(18,2),肛肠科 decimal(18,2),骨密度室 decimal(18,2),骨伤科 decimal(18,2),骨外科 decimal(18,2),骨质增生科 decimal(18,2),急诊科 decimal(18,2),检验科 decimal(18,2),江西路社区 decimal(18,2),江西路社区药房 decimal(18,2),康复科 decimal(18,2),口腔科 decimal(18,2),临检室 decimal(18,2),麻醉科 decimal(18,2),门诊取血室 decimal(18,2),免疫室 decimal(18,2),内科 decimal(18,2),内科2 decimal(18,2),皮肤科 decimal(18,2),生化室 decimal(18,2),手术室 decimal(18,2),外科 decimal(18,2),胃镜 decimal(18,2),文明里社区 decimal(18,2),文明里社区药房 decimal(18,2),西药房 decimal(18,2),细菌室 decimal(18,2),心电图室 decimal(18,2),心身科 decimal(18,2),血库 decimal(18,2),血栓治疗 decimal(18,2),血透室 decimal(18,2),眼科 decimal(18,2),预防接种科 decimal(18,2),针灸科 decimal(18,2),针灸专家 decimal(18,2),痔瘘科 decimal(18,2),中心药房 decimal(18,2),专家门诊 decimal(18,2),药占比 decimal(18,2),合计 decimal(18,2))'

  exec sp_executesql @mysql



其中 第二段代码中的@mysql 和第一段中的一样,结果,第一段代码执行失败,截取字符串了, 第二段执行成功,

------解决方案--------------------
不传递参数时:
exec sp_executesql @mysql

直接写成:

exec (@mysql)
就行了.

可以这样定义:
declare @mysql nvarchar(max)




------解决方案--------------------
exec(@mysql)