读书人

select * into from中能否使用子查询的

发布时间: 2012-06-20 20:37:21 作者: rapoo

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 destset @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写吧。

读书人网 >SQL Server

热点推荐