【*存储过程*】游标+跨库+记录合并字段+异常
来源:互联网 发布:teamviewer端口被屏蔽 编辑:程序博客网 时间:2024/04/28 18:47
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: Dotte
-- Create date: 2010-8-11
-- Description: 统计XX客户使用情况
-- =============================================
ALTER PROCEDURE [dbo].[SP_CNIM_App_UseStatistic]
@startDate varchar(50)='1753/01/01 00:00:00',
@endDate varchar(50)='9999/12/31 23:59:59'
AS
BEGIN
--变量定义
declare @companyID nvarchar(20) --企业号
declare @strSql nvarchar(4000) --临时sql
declare @DataBaseName nvarchar(200) --数据库名
--1、遍历所有的用户
--定义游标
DECLARE company_cursor CURSOR FOR
SELECT CompanyID,DataBaseName FROM PF_CompanyAttachedInfo t1 ORDER BY CompanyID
--打开游标
OPEN company_cursor
--开始遍历
FETCH NEXT FROM company_cursor INTO @CompanyID,@DataBaseName
WHILE @@FETCH_STATUS = 0
BEGIN
--企业人数
set @strSql='UPDATE dbo.App_UseStatistic SET UserNum=( select count(1) from '+@DataBaseName+'.dbo.UserInfo where AccountState=1 ) '
--在线人数
set @strSql=@strSql+', OnlineNum=( select count(1) from (select num=count(1) from '+@DataBaseName+'.dbo.User_LogInfo where DateDiff(day,'''+@StartDate+''',EntryTime)>=0 and DateDiff(day,EntryTime,'''+@EndDate+''')>=0 group by LogUserID ) t1 ) '
--单聊消息数
set @strSql=@strSql+', SingleTalkMsgNum=( select count(1) from '+@DataBaseName+'.dbo.S_SingleTalkMsg where DateDiff(day,'''+@StartDate+''',EntryTime)>=0 and DateDiff(day,EntryTime,'''+@EndDate+''')>=0 ) '
--群聊消息数
set @strSql=@strSql+', GroupTalkMsgNum=( select count(1) from '+@DataBaseName+'.dbo.S_GroupTalkMsg where DateDiff(day,'''+@StartDate+''',EntryTime)>=0 and DateDiff(day,EntryTime,'''+@EndDate+''')>=0 ) '
--文件消息数
set @strSql=@strSql+', FileMsgNum=( select count(1) from '+@DataBaseName+'.dbo.S_FileMsg where DateDiff(day,'''+@StartDate+''',EntryTime)>=0 and DateDiff(day,EntryTime,'''+@EndDate+''')>=0 ) '
--系统消息数
set @strSql=@strSql+', SysMsgNum=( select count(1) from '+@DataBaseName+'.dbo.S_SysMsg where DateDiff(day,'''+@StartDate+''',EntryTime)>=0 and DateDiff(day,EntryTime,'''+@EndDate+''')>=0 ) '
--第一次使用时间
set @strSql=@strSql+', FirstUseDate=( select Top 1 LogTime from '+@DataBaseName+'.dbo.User_LogInfo order by LogID asc ) '
--最后一次使用时间
set @strSql=@strSql+', LastUseDate=( select Top 1 LogTime from '+@DataBaseName+'.dbo.User_LogInfo order by LogID desc ) '
--版本
set @strSql=@strSql+', ClientVersion=( select Top 1 Version from '+@DataBaseName+'.dbo.ClientVersion order by ID desc ) '
set @strSql=@strSql+' WHERE companyID= '+@CompanyID
set @strSql=@strSql+';';
--频道名
set @strSql=@strSql+'
declare @chanelNames nvarchar(1000);
set @chanelNames='''';
select @chanelNames=@chanelNames+chanelName+'','' from CNIM_APP.dbo.PF_Rel_ChanelCompany a
inner join CNIM_APP.dbo.PF_Chanel b on a.ChanelID=b.ChanelID
where a.companyID='+@CompanyID+';
update App_UseStatistic set ChanelName=@chanelNames where companyID='+@CompanyID
--print @strSql;
BEGIN TRY
exec(@strSql);
END TRY
BEGIN CATCH
--在这里添加错误处理语句
END CATCH
--移动游标
FETCH NEXT FROM company_cursor into @CompanyID,@DataBaseName
END --遍历结束
--关闭游标
CLOSE company_cursor
DEALLOCATE company_cursor
--频道数
set @strSql='Update App_UseStatistic set ChanelNum=( select count(1) from CNIM_APP.dbo.PF_Rel_ChanelCompany where companyID=App_UseStatistic.companyID ) '
exec(@strSql);
END
- 【*存储过程*】游标+跨库+记录合并字段+异常
- Oracle存储过程例子游标异常
- Oracle存储过程记录异常
- PLSQL语法&&游标&&存储过程/存储函数&&异常&&触发器
- 存储过程中游标对字段的读取
- 存储过程中游标以及异常的处理
- oracle 存储过程,游标、异常处理,集合使用入门详解
- 存储过程,视图,游标,流程控制语句,异常处理
- oracle使用游标让存储过程返回记录集
- oracle存储过程,记录异常信息
- Oracle存储过程中常见异常记录
- 存储过程、游标
- 游标与存储过程
- 存储过程+游标
- 存储过程和游标
- 存储过程使用游标
- 存储过程返回游标
- oracle存储过程,游标
- 合伙开公司应有哪些注意事项(整理贴)
- 载入图片|swf|mp3as类库|声音有关的类
- Linux启动过程剖析
- 云计算电话面试
- Windows Mobile开发环境搭建指南
- 【*存储过程*】游标+跨库+记录合并字段+异常
- 【转】sql排序规则
- 整理与网络资源
- Flash交互动画的制作(一)
- SoapHeader 传递用户身份验证信息
- Eclipse中的Access restriction错误
- 从拆解到定制自己的"initrd.img"
- 从今天开始起,周一到周五,每天写博客
- service 命令用法