none
SQL串“ print” 不不来,怪哉,急急急急。。。 RRS feed

  • 问题

  • declare  @sqlstr  varchar(2500); --调试SQL
     
     if(@countrowbefore = 0  and  @countrowaccomplish = 0)
                    begin
                    print '执行到了3'
                   
                    set @sqlstr= @sqlstr + 'select  * ,'''+@EsName+'''+ as EsName,'''+@EsTypeName+''' as EsTypeName,'''+@EnergyTypeName+''' as EnergyTypeName,'+Cast(@EsPct as varchar(16))+' as EsPct,'+Cast(@ActPct as varchar(16))+' as ActPct,'''+@BuildingName+''' as  BuildingName from  
                     ( select  *  from   (select  *  from   ESDataSumByHour   where  EsId='''+@EsId+'''  and  BuildingNo='''+@BuildingNo+'''  and  EnergyType='''+@EnergyType+'''  and  DADay='''+@DADayBefore+'''  and (DateFlag =''A'' or DateFlag =''T'')) as  pt
                        pivot (sum(SumQty) for DAHour in ([00],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]))  as  rt
                        union all
                       
                        select  *  from   (select  *  from   ESDataSumByHour   where  EsId='''+@EsId+'''  and  BuildingNo='''+@BuildingNo+'''  and  EnergyType='''+@EnergyType+'''  and  DADay='''+@DADayAccomplish+'''  and  DateFlag =''B'') as  pt
                        pivot (sum(SumQty) for DAHour in ([00],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]))  as  rt
                      )  as  rall '
                      
                      print   @sqlstr
                      
                      print  '执行到了3.1'

    输出结果:


    问题:怎么回事???   中间的“ print   @sqlstr”没有输出,而前后的标示都输出了。  

    Science and technology is my lover.

    2012年11月13日 6:45

答案

  • 这些变量@EsName等等都赋予值了吗?没有赋值的话默认都是Null值,Null值和任意值得运算结果都是Null值


    麻将


    • 已编辑 石子 2012年11月13日 9:22
    • 已标记为答案 starrycheng 2012年11月14日 4:07
    2012年11月13日 7:31
  •     把 print @sqlstr

        改成 print  isnull(@sqlstr,'这是null值')

        试一试

    • 已标记为答案 starrycheng 2012年11月14日 4:07
    2012年11月13日 14:51
    版主
  • declare  @sqlstr  varchar(2500)=''; --调试SQL

    直接声明时加初值就好了


    草长一生只一春,木活一世才几轮 --草木

    • 已标记为答案 starrycheng 2012年11月14日 4:06
    2012年11月14日 3:56

全部回复

  • declare  @sqlstr  varchar(2500); --调试SQL

    select @sqlstr  =''
     
    if(@countrowbefore = 0  and  @countrowaccomplish = 0)
                    begin
                    print '执行到了3'
                  
                   set @sqlstr= @sqlstr + 'select  * ,'''+@EsName+'''+ as EsName,'''+@EsTypeName+''' as EsTypeName,'''+@EnergyTypeName+''' as EnergyTypeName,'+Cast(@EsPct as varchar(16))+' as EsPct,'+Cast(@ActPct as varchar(16))+' as ActPct,'''+@BuildingName+''' as  BuildingName from 
                     ( select  *  from   (select  *  from   ESDataSumByHour   where  EsId='''+@EsId+'''  and  BuildingNo='''+@BuildingNo+'''  and  EnergyType='''+@EnergyType+'''  and  DADay='''+@DADayBefore+'''  and (DateFlag =''A'' or DateFlag =''T'')) as  pt
                        pivot (sum(SumQty) for DAHour in ([00],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]))  as  rt
                        union all
                      
                        select  *  from   (select  *  from   ESDataSumByHour   where  EsId='''+@EsId+'''  and  BuildingNo='''+@BuildingNo+'''  and  EnergyType='''+@EnergyType+'''  and  DADay='''+@DADayAccomplish+'''  and  DateFlag =''B'') as  pt
                        pivot (sum(SumQty) for DAHour in ([00],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]))  as  rt
                      )  as  rall '
                     
                      print   @sqlstr
                     
                      print  '执行到了3.1'



    麻将

    2012年11月13日 6:56
  • 楼上正解。

    我给解释一下,@sqlstr  没有赋初值,就是NULL,NULL+字符串还是NULL。NULL print出来你看不见。

    所以楼上加了个 @sqlstr  = ''


    想不想时已是想,不如不想都不想。

    2012年11月13日 7:02
    版主
  • 加了“select @sqlstr  =''” ,还是不行啊,大师。。。

    print '执行到了3'
                    select @sqlstr  =''
                    set  @sqlstr= @sqlstr + '开始了'
                    set @sqlstr = @sqlstr + 'select  * ,'''+@EsName+'''+ as EsName,'''+@EsTypeName+''' as EsTypeName,'''+@EnergyTypeName+''' as EnergyTypeName,'+Cast(@EsPct as varchar(16))+' as EsPct,'+Cast(@ActPct as varchar(16))+' as ActPct,'''+@BuildingName+''' as  BuildingName from   '
                       +  '  ( select  *  from   (select  *  from   ESDataSumByHour   where  EsId='''+@EsId+'''  and  BuildingNo='''+@BuildingNo+'''  and  EnergyType='''+@EnergyType+'''  and  DADay='''+@DADayBefore+'''  and (DateFlag =''A'' or DateFlag =''T'')) as  pt  '
                       + ' pivot (sum(SumQty) for DAHour in ([00],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]))  as  rt  '
                        
                        + '  union all  '
                        
                        + '  select  *  from   (select  *  from   ESDataSumByHour   where  EsId='''+@EsId+'''  and  BuildingNo='''+@BuildingNo+'''  and  EnergyType='''+@EnergyType+'''  and  DADay='''+@DADayAccomplish+'''  and  DateFlag =''B'') as  pt    '
                        
                        +' pivot (sum(SumQty) for DAHour in ([00],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]))  as  rt  '
                        +' )   as  rall  '
                        
                       
                      
                      set @sqlstr=@sqlstr  +  '结束了'
                      print   @sqlstr
                      
                      print  '执行到了3.1'
                      


    Science and technology is my lover.


    2012年11月13日 7:23
  • 加了“select @sqlstr  =''” ,还是不行啊,大师。。。

    print '执行到了3'
                    select @sqlstr  =''
                    set  @sqlstr= @sqlstr + '开始了'

                    set @sqlstr = @sqlstr + 'select  * ,'''+@EsName+'''+ as EsName,'''+@EsTypeName+''' as EsTypeName,'''+@EnergyTypeName+''' as EnergyTypeName,'+Cast(@EsPct as varchar(16))+' as EsPct,'+Cast(@ActPct as varchar(16))+' as ActPct,'''+@BuildingName+''' as  BuildingName from   '
                       +  '  ( select  *  from   (select  *  from   ESDataSumByHour   where  EsId='''+@EsId+'''  and  BuildingNo='''+@BuildingNo+'''  and  EnergyType='''+@EnergyType+'''  and  DADay='''+@DADayBefore+'''  and (DateFlag =''A'' or DateFlag =''T'')) as  pt  '
                       + ' pivot (sum(SumQty) for DAHour in ([00],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]))  as  rt  '
                        
                        + '  union all  '
                        
                        + '  select  *  from   (select  *  from   ESDataSumByHour   where  EsId='''+@EsId+'''  and  BuildingNo='''+@BuildingNo+'''  and  EnergyType='''+@EnergyType+'''  and  DADay='''+@DADayAccomplish+'''  and  DateFlag =''B'') as  pt    '
                        
                        +' pivot (sum(SumQty) for DAHour in ([00],[01],[02],[03],[04],[05],[06],[07],[08],[09],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]))  as  rt  '
                        +' )   as  rall  '
                        
                       
                      
                      set @sqlstr=@sqlstr  +  '结束了'
                      print   @sqlstr
                      
                      print  '执行到了3.1'


    还是不行啊,大师。。。    难道中间拼接了那么长的地方被认为了“null”,可是怎么会是“null”的。其中有变量为“NULL”,是这样吗???  

    Science and technology is my lover.

    2012年11月13日 7:28
  • 这些变量@EsName等等都赋予值了吗?没有赋值的话默认都是Null值,Null值和任意值得运算结果都是Null值


    麻将


    • 已编辑 石子 2012年11月13日 9:22
    • 已标记为答案 starrycheng 2012年11月14日 4:07
    2012年11月13日 7:31
  • 刚才调试了一下,比较困难,太长了

    给我写信: QQ我:点击这里给我发消息

    2012年11月13日 12:52
  •     把 print @sqlstr

        改成 print  isnull(@sqlstr,'这是null值')

        试一试

    • 已标记为答案 starrycheng 2012年11月14日 4:07
    2012年11月13日 14:51
    版主
  • declare  @sqlstr  varchar(2500)=''; --调试SQL

    直接声明时加初值就好了


    草长一生只一春,木活一世才几轮 --草木

    • 已标记为答案 starrycheng 2012年11月14日 4:06
    2012年11月14日 3:56
  • 请问thomes.kong大侠,你这样写也可以编译通过吗?

    DECLARE @a NVARCHAR(10)='ni你112'
    SELECT @a


    给我写信: QQ我:点击这里给我发消息

    2012年11月14日 5:43
  • 请问thomes.kong大侠,你这样写也可以编译通过吗?

    DECLARE @a NVARCHAR(10)='ni你112'
    SELECT @a


    给我写信: QQ我:点击这里给我发消息

    2008之前的版本不行,新增的功能(= value

    http://msdn.microsoft.com/en-us/library/ms188927(v=sql.100).aspx

    2005的没这个选项的:

    http://msdn.microsoft.com/en-us/library/ms188927(v=sql.90).aspx
    2012年11月14日 8:41
  • 我都已经习惯了,忘记了以前版本没这功能了。

    想不想时已是想,不如不想都不想。

    2012年11月15日 7:49
    版主
  • 这麽新的功能没有用过

    declare  @sqlstr  varchar(2500)='';

    因为要兼容以前sql2000 与sql2005 所以我们一般考虑都是数据库兼容

    例如,分页不用row number() over 而使用临时表的方法


    给我写信: QQ我:点击这里给我发消息

    2012年11月15日 11:30