积极答复者
SQL串“ print” 不不来,怪哉,急急急急。。。

问题
-
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.
答案
-
把 print @sqlstr
改成 print isnull(@sqlstr,'这是null值')
试一试
- 已标记为答案 starrycheng 2012年11月14日 4:07
-
declare @sqlstr varchar(2500)=''; --调试SQL
直接声明时加初值就好了
草长一生只一春,木活一世才几轮 --草木
- 已标记为答案 starrycheng 2012年11月14日 4:06
全部回复
-
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'
麻将
-
加了“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.
- 已编辑 starrycheng 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.
-
把 print @sqlstr
改成 print isnull(@sqlstr,'这是null值')
试一试
- 已标记为答案 starrycheng 2012年11月14日 4:07
-
declare @sqlstr varchar(2500)=''; --调试SQL
直接声明时加初值就好了
草长一生只一春,木活一世才几轮 --草木
- 已标记为答案 starrycheng 2012年11月14日 4:06
-
请问thomes.kong大侠,你这样写也可以编译通过吗?
DECLARE @a NVARCHAR(10)='ni你112'
SELECT @a
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