`
insertyou
  • 浏览: 901409 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

项目开发笔记(临时视图)-1

 
阅读更多
电信话单查询模块开发心得(临时视图的使用)

前个星期,在女友的关系介绍下,找到了项目,就是开发一个话单查询子系统,由于是电信级别的东西,数据量自然是大了,日数据量就有500万左右,听了都是吓人的(具体我也不清楚,因为是负责人说的).
 项目拿到了,碰到的首要问题就是:如何跨多表查询?
例如:2006-5-1日的数据就存在 F_20050502中
2006-5-2日的数据就存在 F_20050502中
   2006-5-3日的数据就存在 F_20050503中
依次类推...
   而,用户查询的时候,又需要从多个表中查询数据.例如:查2006-5-1 到 2006-5-10的数据,就要跨10个表.(真的是很麻烦)
经过2天的思索,我想出了以下的方案.用存储过程实现,通过传入 start_time (起始时间) end_time(结束时间),用循环查询先确定表是否存在,然后动态生成一个 select 语句.用 union all 把这些个select语句组合在一起.代码如下:
declare @sd datetime
declare @ed datetime
declare @td datetime
declare @NN int
declare @d int
declare @sql varchar(4000)
declare @T varchar(255)
set @sd=@start_time--CAST('2006-05-01 12:35:29.998' AS datetime)
set @ed=@end_time --CAST('2006-05-03 12:35:29.998' AS datetime)
--set @td=@sd
set @d=datediff(DD,@sd,@ed)
print @d
print @td

set @NN=0
set @sql=' '

DECLARE @FLAG INT
SET @FLAG=0

-- 生成待查询的数据表 集合

while @NN<=@d
begin
set @td=dateadd(DD,@NN,@sd)
set @NN=@NN+1
SET @T=DATEPART(YYYY,@td)
if DATEPART(MM,@td)<10
set @T=@T+'0'+cast(DATEPART(MM,@td) as char(1))
else
set @T=@T+CAST(DATEPART(MM,@td) AS CHAR(2))
if DATEPART(DD,@td)<10
set @T=@T+'0'+cast(DATEPART(DD,@td) as char(1))
else
set @T=@T+CAST(DATEPART(DD,@td) AS CHAR(2))
SET @T='FACT_'+@T
--PRINT @T
if exists (select * from sysobjects where id = object_id(@T) and OBJECTPROPERTY(id, 'IsUserTable') = 1)
BEGIN
--PRINT '-----'
PRINT @T
--PRINT '!----!'
--考虑时间范围 小时/分
IF @FLAG=0
begin
SET @SQL='SELECT '+@fileds+' FROM '+@T+' where start_time>='''+cast(@start_time as varchar(50))+''' and '+@query
SET @FLAG=1
end
ELSE
begin
SET @SQL=@SQL+' UNION ALL SELECT '+@fileds+' FROM '+@T+' where '+@query
end
END

end

  到此处,@SQL里,已经是多个表查询的语句了.再在外面套上一个 select 语句就可以查询.
  如: @SQL='select * from ('+@SQL+')'就可以了
最后exec(@SQL)就可以返回数据了.

不过,经过实际运用,该方法不太好,生成的sql 语句太长,而且是用不方便.于是我又想出了第2种办法,就是"临时视图",为什么有"临时表"就不能有"临时视图"呢?
  采用了该方法后,程序大大简化了.而且使用方便了,至于效率吗(机器效率)应该是低点.
具体思路是:
   程序运行时,先确定范围,然后根据范围自动创建一个视图,提供给后续查询用,查询完毕后,用drop把视图删除.
具体如下
while @NN<=@d
begin
set @td=dateadd(DD,@NN,@sd)
set @NN=@NN+1
SET @T=DATEPART(YYYY,@td)
if DATEPART(MM,@td)<10
set @T=@T+'0'+cast(DATEPART(MM,@td) as char(1))
else
set @T=@T+CAST(DATEPART(MM,@td) AS CHAR(2))
if DATEPART(DD,@td)<10
set @T=@T+'0'+cast(DATEPART(DD,@td) as char(1))
else
set @T=@T+CAST(DATEPART(DD,@td) AS CHAR(2))
SET @T='FACT_'+@T

--PRINT @T
if exists (select * from sysobjects where id = object_id(@T) and OBJECTPROPERTY(id, 'IsUserTable') = 1)
BEGIN
set @FLAG=@FLAG+1
IF @FLAG=1
begin
set @sql='select * from '+@T
end
ELSE
begin
set @sql=@sql+' union all select * from '+@t
end
END
end

if @FLAG=0
begin
select 0
return -1
end
--创建一个零时试图
declare @tmpView varchar(4000)

set @tmpView='tmpV'+cast(DATEPART(YYYY,getDate()) as varchar(4))+
cast(DATEPART(MM,getDate()) as varchar(2))+
cast(DATEPART(DD,getDate()) as varchar(2))+
cast(DATEPART(HH,getDate()) as varchar(2))+
cast(DATEPART(SS,getDate()) as varchar(2))+
cast(DATEPART(MS,getDate()) as varchar(4))

set @sql='CREATE VIEW '+@tmpView+ ' as '+@sql
print @sql

exec(@sql)
--临时视图创建完毕

到此视图@tmpView 就创建好了.后面的查询都可以直接引用 @tmpView了.

在查询结束后,只需要在执行下面的语句即可
set @sql='drop view '+@tmpView
exec(@sql)
分享到:
评论

相关推荐

    SSM笔记-SpringMVC自定义视图及重定向视图、语言国际化

    1. 创建资源文件:在项目的`src/main/resources`目录下,为每种语言创建一个名为`messages.properties`的文件,例如,对于英文环境是`messages_en.properties`,对于中文环境是`messages_zh_CN.properties`。...

    android笔记--适应于初学者

    总之,这个“android笔记”涵盖了Android开发中的一些基本要素,为初学者提供了一个良好的学习起点。掌握Dialog的用法、数据存储的策略、动画的实现以及广播接收器的运用,将使你在Android开发的道路上迈出了坚实的...

    grails开发笔记

    ### Grails 开发笔记 #### Grails 概述 Grails 是一款用于 Web 应用开发的开源框架,它基于 Groovy 编程语言,并集成了 Spring、Hibernate 和 SiteMesh 等成熟技术栈。其核心特性之一是“规约取代配置”...

    OmniFocus-1.5-Manual

    - **附件与笔记**:支持在行动和项目中附加文件和笔记,增强信息记录的完整性。 - **标记下一步行动**:明确每个项目中的下一步行动,提高效率。 - **项目类型:顺序或并行**:项目可以设置为顺序执行或并行执行,...

    【免费】ThinkPHP3.1.2经典笔记

    ### ThinkPHP3.1.2经典笔记知识点详解 #### 一、ThinkPHP 框架简介 ##### 1.1 ThinkPHP 概述 - **ThinkPHP** 是一个开源的 PHP 开发框架,旨在简化 Web 应用程序的开发过程。它采用 MVC (Model-View-Controller) ...

    一个简单的 Android 开发项目示例:一个简单的笔记应用

    在Android开发领域,创建一个简单的笔记应用是初学者常见的练习,它可以帮助开发者理解基本的UI设计、数据存储以及用户交互。下面将详细讲解这个项目涉及的关键知识点。 首先,Android应用程序通常由多个组件构成,...

    SSM项目待完善

    6. **文件列表**:在提供的文件名中,"新建文本文档.txt"通常是一个空白文本文件,可能被用来临时存储笔记或草稿,但在项目结构中可能没有实际作用。"gaokao"这个文件名看起来不太符合常规的Java项目文件命名规范,...

    springMVC笔记以及实例

    它是一个轻量级的、基于注解的模型-视图-控制器(MVC)架构,为Java开发者提供了构建高性能、灵活的Web应用的工具。在这个"springMVC笔记以及实例"的压缩包中,可能包含了关于SpringMVC的详细讲解、代码示例,特别是...

    notes-源码.rar

    这可能意味着这个压缩包是个人笔记、学习资料或者是项目开发中的临时存储。源码分析通常涉及理解代码结构、函数和类的定义、数据处理逻辑以及可能的算法实现。 【标签】虽然没有明确的标签,但我们可以假设这个源码...

    Java 学习笔记 开发环境搭建JDK+Tomcat+Eclipse

    ### Java学习笔记:开发环境搭建JDK+Tomcat+Eclipse #### 一、开发工具获取 ##### 1、开发工具包JDK JDK(Java Development Kit)是Java语言的基础软件包,它提供了编译、运行Java程序所需的所有工具。 - **下载...

    eclipse-java学习笔记

    18. **开发流程**:一个完整的项目开发通常包括需求分析、用例图、模块设计、系统架构、数据库设计、界面设计以及部署等多个步骤。 在使用Eclipse进行Java开发时,掌握这些基本概念和技巧是非常重要的。通过不断...

    Eclipse中文教程.pdf

    - **建立快速视图**:用于临时查看某些信息而不必打开完整的视图。 - **使用快速视图**:当用户需要查看但又不想在工作台中占用太多空间时非常有用。 ### 比较 - **简单比较**:可以直接比较两个文件的内容差异。 -...

    软件构造复习笔记.pdf

    1. **软件构造的多维视图**: - **阶段划分**:软件构造可分为**构造阶段**和**运行阶段**。构造阶段侧重于开发和构建过程,而运行阶段则关注软件在用户环境中的执行和表现。 - **动态性划分**:可以进一步按**...

    CodeFirstEFCS

    - 这可能是一个临时的文本文件,可能包含开发过程中的笔记或待办事项。 6. **README.txt**: - 这通常用于提供项目说明、安装指南或者运行步骤。 7. **packages**: - 这个文件夹可能包含了项目的NuGet包,用于...

    崔希凡javaweb28天笔记

    通过崔希凡的JavaWeb28天笔记,开发者不仅可以系统地学习Java Web的基础知识,还能了解和实践实际项目开发中的常见问题和解决方案。这份资料对于初学者和有一定经验的开发者都是极具价值的参考资料,可以帮助他们在...

    自己看,和你们没有关系

    “过渡”一词可能意味着这个压缩包包含了一些关于作者正在从一个项目阶段过渡到另一个阶段的Django学习资料,或者是项目开发过程中的临时文件。这可能包括笔记、代码示例、配置文件、数据库模型设计等,对于理解和...

    Android学习笔记12:框架布局管理器FrameLayout

    在Android开发中,布局管理器是构建用户界面的关键部分,它们负责组织和定位视图(View)或视图组(ViewGroup)。本篇我们将深入探讨`FrameLayout`,这是一个非常基础但灵活的布局管理器,它允许你在屏幕上精确地...

    structs 入门笔记

    ### structs 入门笔记 #### 一、Struts框架概览 **Struts** 是一个开源的MVC(Model-View-Controller)架构框架,它主要用于简化Java Web应用程序的开发。Struts由Apache软件基金会维护和支持,是Java企业级开发中...

    基于ssm+jsp的母婴用品网站+数据库(毕业设计,包括源码,教程).zip

    `a.txt`可能是一个文本文件,它可能包含了项目开发过程中的笔记、问题记录或者是一些临时的数据。至于`母婴用品网站`,这可能是一个解压后的目录,包含了一系列的Web应用文件,如Java源代码、JSP页面、配置文件、...

Global site tag (gtag.js) - Google Analytics