ALTER proc [dbo].[SearchTbByClassAndId]
@class varchar(16),
@cid int,
@addcount int output,
@lostcount int output,
@oldcount int outputas
declare @sql varchar(2048),@tbi int,@lastTableName varchar(18),@lastBeforeTableName varchar(18)set @tbi=0while @tbi<@cid
begin
set @lastTableName = @class +'_'+dbo.GetLastDay()+'_'+convert(varchar(2),@tbi) --昨天表名
set @lastBeforeTableName = @class +'_'+dbo.GetLastBeforeDay()+'_'+convert(varchar(2),@tbi) --前天表名
print @lasttablename
set @sql='select count(*) from '+@lastTableName+' where '+@lastTableName+'.Uid not in (select '+@lastBeforeTableName+'.Uid from '+@lastBeforeTableName+');'--新增用户exec (@sql) 
在这里怎么能取到新增用户的个数呢
set @sql='select count(*) from '+@lastBeforeTableName+' where '+@lastBeforeTableName+'.Uid not in (select '+@lastTableName+'.Uid from '+@lastTableName+')' --流失用户
exec (@sql)
在这里怎么能取到新增用户的个数呢set @sql='select count(*) from '+@lastTableName+' inner join '+@lastBeforeTableName+' on '+@lastTableName+'.Uid='+@lastBeforeTableName+'.Uid' --稳定用户
exec (@sql)
在这里怎么能取到新增用户的个数呢set @tbi=@tbi+1
end 请大家帮忙啊,我能试的都试过了,还是取不到啊!

解决方案 »

  1.   

    你每执行一次exec,实际上都是查询到了一个数据表你完全可以利用DataSet ds = new DataSet();
    ds.tables[0].rows[0][0].tostring();
    ds.tables[1].rows[0][0].tostring();
    ds.tables[2].rows[0][0].tostring();还有一种方法是采用存储过程的返回值
      

  2.   

    用 sp_executesql函数,声明一个变量,然后'select 变量=count(*) from。。'
    顺便给你一段代码:
    set @ExcStr = ' select  @CountNum=Count(*) from '+ @AreaName+ '  where WM_Account = '+ ''''+ @PARAM2 +''''+ ' and '+'Convert(varchar(8),Use_date,120)   like '+''''+ @PARAM1+ '%'+ ''''
    EXECUTE sp_executesql @ExcStr, N'@CountNum int output',@CountNum outputif(@CountNum > 0)
      

  3.   


    Declare @V_Count Int
    Declare @sql nvarchar(4000)
    set @sql = N'select @P_Count = count(*) from '+@lastTableName+' where '+@lastTableName+'.Uid not in (select '+@lastBeforeTableName+'.Uid from '+@lastBeforeTableName+');'--新增用户 Exec sp_executesql @sql, N'@P_Count Int Out', @V_Count OutPrint @V_Count