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

select * into from中能否使用子查询的问题?
SQL code

set @sqlstr='select 部品品番,供应商名称,sum(case 月份 when '''+ @yf1 + '''then 部品数量 else 0 end) '''+  @yf1 +'''
           ,sum(case 月份 when '''+ @yf2 + '''then 部品数量 else 0 end) '''+  @yf2 +''' 
           ,sum(case 月份 when '''+ @yf3 + '''then 部品数量 else 0 end) '''+  @yf3 +''' 
           from dest group by 部品品番,供应商名称'



想把以上的查询存进新表

SQL code

declare @sqlstr varchar(8000)--这种方法,varchar的内容一定不够,数据有2万行.
set @sqlstr='select ,部品品番,供应商名称'
select @sqlstr=@sqlstr+', sum(case 月份 when ''' + cast(月份 as varchar )+ ''' then 部品数量 else 0 end) ['+ 月份 +']'
from dest
set @sqlstr='select 部品品番,供应商名称,'+ substring(@sqlstr,20,len(@sqlstr))+' into dest1 from dest group by 部品品番,供应商名称,月份'
exec(@sqlstr)





求高手指点.............

------解决方案--------------------
把你的变量@sqlstr设置为nvarchar(MAX)类型就可以解决varchar的内容不够的问题。另外,把你的@sqlstr输出看一下,还不知道你具体要问什么问题。
------解决方案--------------------
首先,2000也支持子查询的。
第二,如果你担心长度不够,建议你用表关联而不是子查询,如果你放到in里面,那很有可能报错,执行计划无法生成这个错误。
第三,我本人比较不喜欢用拼接字符串。所以不是很看的太懂你的查询。
------解决方案--------------------
探讨
SQL code

set @sqlstr='select 部品品番,供应商名称,sum(case 月份 when '''+ @yf1 + '''then 部品数量 else 0 end) '''+ @yf1 +'''
,sum(case 月份 when '''+ @yf2 + '''then 部品数量 else 0 end) '''+ @yf2 +'''
……

------解决方案--------------------
select * into newtable from table where ......
这样解决不了问题么?

------解决方案--------------------
如果楼主你觉得拼接的动态SQL长度会超过8000字符,在SQL2000的环境下无法解决的话,那么就放弃动态SQL的拼接,老老实实一行一行的case when写吧。