动态SQL应用小列子

简介:
 呵呵,几乎成标题党了,今天要写个脚本查询7天内所有有登录玩家的数据,要求按注册日期统计,虽然是个简单的问题,但是关键是用户表有30个,分别是 user0, user1......到user29 ,光是把它们UNION ALL起来,我都够郁闷了,你想象下脚本有多长吧,一大堆堆在那儿,光是复制都让你难以忍受。 
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->SELECT Id,CONVERT(VARCHAR(10),Create_Time, 120), Last_Login_Time FROM user0
UNION ALL
SELECT Id,CONVERT(VARCHAR(10),Create_Time, 120), Last_Login_Time FROM user1
UNION ALL
SELECT Id,CONVERT(VARCHAR(10),Create_Time, 120), Last_Login_Time FROM user2
.........

 

 呵呵,下面是我用动态SQL 改写的,呵呵,简洁多了

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->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);
这里得提提  CHAR(10)这个,个人感觉非常有用,刚开始的时候,没有加换行符,把这段脚本输出的时候,格式比较乱,很多时候,复杂的动态脚本,都需要输出,查看,调试一番, 就像PRINT     @cmdText   那样,如果输出格式比较乱,自己调整需要花费一定功夫,在写的时候,如果注意脚本格式了,那就要省很多功夫了。而且也有助于以后维护,修改。
相关文章
|
27天前
|
SQL Java 编译器
SQL 语言:嵌入式 SQL 和动态 SQL
SQL 语言:嵌入式 SQL 和动态 SQL
26 4
|
29天前
|
SQL 监控 关系型数据库
实际应用中监控和诊断SQL语句执行情况的具体案例
实际应用中监控和诊断SQL语句执行情况的具体案例
|
2月前
|
SQL Java 关系型数据库
Mybatis多表关联查询与动态SQL(下)
Mybatis多表关联查询与动态SQL
63 0
|
5天前
|
SQL Java 数据库连接
深入探索MyBatis Dynamic SQL:发展、原理与应用
深入探索MyBatis Dynamic SQL:发展、原理与应用
|
8天前
|
SQL XML 数据库
后端数据库开发高级之通过在xml文件中映射实现动态SQL
后端数据库开发高级之通过在xml文件中映射实现动态SQL
15 3
|
2天前
|
SQL 数据处理 数据库
SQL SELECT语句的高级应用与技巧
SQL SELECT语句的高级应用与技巧
|
27天前
|
SQL XML Java
MyBatis第四课动态SQL
MyBatis第四课动态SQL
|
4天前
|
SQL 搜索推荐 Java
什么是笛卡尔积及其在SQL查询中的应用
什么是笛卡尔积及其在SQL查询中的应用
|
4天前
|
SQL 缓存 Java
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
|
4天前
|
SQL Java 数据库连接
MyBatis动态SQL
MyBatis动态SQL
13 0