动态SQL应用小列子
来源:互联网 发布:宿迁网络问政 编辑:程序博客网 时间:2024/04/30 11:54
呵呵,几乎成标题党了,今天要写个脚本查询7天内所有有登录玩家的数据,要求按注册日期统计,虽然是个简单的问题,但是关键是用户表有30个,分别是user0, user1......到user29 ,光是把它们UNION ALL起来,我都够郁闷了,你想象下脚本有多长吧,一大堆堆在那儿,光是复制都让你难以忍受。
呵呵,下面是我用动态SQL 改写的,呵呵,简洁多了
DECLARE @cmdText VARCHAR(8000);
DECLARE @userIndex INT;
SET @cmdText = '';
SET @userIndex = 0;
WHILE @userIndex <30
BEGIN
IF (@userIndex != 29)
SELECT @cmdText = @cmdText + 'SELECT Id,Create_Time, Last_Login_Time FROM '
+ ' dbo.user' + CONVERT(VARCHAR,@userIndex)
+ ' UNION ALL' + CHAR(10); --换行
ELSE
SELECT @cmdText = @cmdText + 'SELECT Id,Create_Time, Last_Login_Time FROM '
+ 'dbo.user' + CONVERT(VARCHAR,@userIndex) ;
SET @userIndex = @userIndex + 1;
END;
SELECT @cmdText = 'SELECT CONVERT(VARCHAR(10),T.Create_Time, 120) AS Create_Time ,COUNT(0) AS RecordNum FROM ('
+ @cmdText +
') T WHERE DATEDIFF(d,Last_Login_Time,GETDATE()) < 7 GROUP BY CONVERT(VARCHAR(10),Create_Time, 120) ';
--PRINT @cmdText
EXEC (@cmdText);
DECLARE @userIndex INT;
SET @cmdText = '';
SET @userIndex = 0;
WHILE @userIndex <30
BEGIN
IF (@userIndex != 29)
SELECT @cmdText = @cmdText + 'SELECT Id,Create_Time, Last_Login_Time FROM '
+ ' dbo.user' + CONVERT(VARCHAR,@userIndex)
+ ' UNION ALL' + CHAR(10); --换行
ELSE
SELECT @cmdText = @cmdText + 'SELECT Id,Create_Time, Last_Login_Time FROM '
+ 'dbo.user' + CONVERT(VARCHAR,@userIndex) ;
SET @userIndex = @userIndex + 1;
END;
SELECT @cmdText = 'SELECT CONVERT(VARCHAR(10),T.Create_Time, 120) AS Create_Time ,COUNT(0) AS RecordNum FROM ('
+ @cmdText +
') T WHERE DATEDIFF(d,Last_Login_Time,GETDATE()) < 7 GROUP BY CONVERT(VARCHAR(10),Create_Time, 120) ';
--PRINT @cmdText
EXEC (@cmdText);
这里得提提 CHAR(10)这个,个人感觉非常有用,刚开始的时候,没有加换行符,把这段脚本输出的时候,格式比较乱,很多时候,复杂的动态脚本,都需要输出,查看,调试一番, 就像PRINT @cmdText 那样,如果输出格式比较乱,自己调整需要花费一定功夫,在写的时候,如果注意脚本格式了,那就要省很多功夫了。而且也有助于以后维护,修改。
- 动态SQL应用小列子
- sql 小列子
- 委托小列子
- enum枚举小列子
- FragmentTabHost的小列子
- mysql小列子
- SQL一些常用列子
- Jamil的一个小列子
- Strtus2 简单的小列子
- sql case列子 +ISNULL用法
- SQL SERVER多列子查询
- sql 小应用
- SQL小应用
- 应用动态SQL语句
- 动态sql应用
- Mysql 动态SQL 应用
- JavaScript面向对象编程 小列子
- 定时器(Timer)的一个小列子
- 项目经理、系统架构师或技术骨干应该具备的水平
- 数据单独放到 Lable中
- 水晶报表的jsp实现(开发工具:bea weblogic workshop)整理自网络
- 常有控件的绑定
- 系统管理规划步骤
- 动态SQL应用小列子
- Lenka Kripac
- 不使用判断语句求两个数中较大的一个
- 如何在V8中带入的数据使用服务器自动增加的值
- Windows 命令行基础(转载同学的)
- Linux书籍
- PTDAY
- CyclicBarrier And CountDownLatch Tutorial
- C/C++中关于地址、指针和引用变量的学习笔记(七) : sizeof和typedef