zoukankan      html  css  js  c++  java
  • 动态SQL应用小列子

     呵呵,几乎成标题党了,今天要写个脚本查询7天内所有有登录玩家的数据,要求按注册日期统计,虽然是个简单的问题,但是关键是用户表有30个,分别是user0, user1......到user29 ,光是把它们UNION ALL起来,我都够郁闷了,你想象下脚本有多长吧,一大堆堆在那儿,光是复制都让你难以忍受。 

    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 改写的,呵呵,简洁多了

    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   那样,如果输出格式比较乱,自己调整需要花费一定功夫,在写的时候,如果注意脚本格式了,那就要省很多功夫了。而且也有助于以后维护,修改。

    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    六、使用media实现响应式布局
    五、块全屏居中
    四、圆角长方形的设计
    三、常用行内元素与块元素
    二、“…”显示超出文本
    一、CSS实现横列布局的方法总结
    window如何一键关闭所有进程程序
    纯css竟可以做出边框这样长宽度的过渡效果
    改变网页的兼容性模式
    bootstrap知识笔记
  • 原文地址:https://www.cnblogs.com/kerrycode/p/1782047.html
Copyright © 2011-2022 走看看