一、OFFSET和FETCH的分页功能
我们现在页面上显示数据的Gridview绑定是数据源ObjectDataSource控件,这样有一个很大的好处就是可以帮我们做数据显示时候的自动分页,免去了手写分页方法的烦恼。ObjectDataSource分页的原理就是在第一次请求页面的时候将所有数据全部加载,然后在分页请求的时候在客户端根据请求参数对数据进行筛选,即“假分页”。很显然,这样做最起码有两个好处:
1、减少了数据库的请求次数,由于在第一次请求页面时就已经加载了所有的数据,所有无论Gridview将数据分为多少页,后续的分页动作都不会再重新请求数据库,这样在某种程度上提高了页面的执行效率。
2、减少页面刷新次数,由于这种“假分页”是在客户端做筛选的,所以分页动作不会引发页面的刷新,提高了用户体验(当然,这是相对于不用Ajax技术的Aspx页面来说)。
但是,在某些情况下这种方法却不一定这么实用,设想一下这种需求:用户的赛选结果量很大(上万条或者几十万条,比如搜索引擎的查询结果),但是实际上用户所关心的数据大概只是结果集中靠前的几十或者几百条记录(事实上大部分情况下用户都只会关注查询结果中的前面几页的数据)。这种情况下,如果我们还是用上面的分页方式很显然就造成了"资源浪费":为了要显示用户关系的几百条的查询结果而要加载上万条数据。于是,相对于这种问题就有了"真分页",即每次分页动作只请求当前页面大小的数据。
现在SqlServer2012提供了新的分页方法,可以很简单的达到这个效果。
offset关键字:表示从第几条记录开始读取数据
fetch next:表示从读取多少条记录
例:
Select * from ctrl order by CtrlId offset 5 rows
--从第五行开始取数据
Select * from ctrl order by CtrlId offset 5 rows fetch next 3 rows only
--从第五行开始取数据,提取三行记录
这样,只用Sql语句就能很轻松的实现上面的分页功能
例:
二.FileTable(文件表):
在所有的T-SQL增强中,FileTable可能是最酷的功能。FileTable架起数据库和文件系统之间透明的路线,您可以定义一个FileTable表,并在文件系统中分配一个目录。现在,要把文件放到这个表中,您只需要从Windows资源管理器中拖放它们。没有T-SQL要写,没有别的特殊的要做。您的文件管理只要在文件系统级别,像您往常做的,而它们存储在数据库中。您还可以从T-SQL或在Windows级直接更改这些文件。
FileTable 功能为 SQL Server 中存储的文件数据提供对 Windows 文件命名空间的支持以及与 Windows 应用程序的兼容性支持。FileTable 使得应用程序可以集成其存储和数据管理组件,可对非结构化数据和元数据提供集成的 SQL Server 服务(包括全文搜索和语义搜索)。
换言之,您可以在 SQL Server 中将文件和文档存储在称作 FileTable 的特别的表中,但是从 Windows 应用程序访问它们,就好像它们存储在文件系统中,而不必对您的客户端应用程序进行任何更改。
这样,FileTable 将消除使用 SQL Server 来存储和管理非结构化数据的一个巨大障碍,这些数据目前作为文件存储在文件服务器上。企业可以将这些数据从文件服务器移到 FileTable,以利用 SQL Server 提供的集成管理和服务。同时,它们可以保持现有 Windows 应用程序的 Windows 应用程序兼容性,将这些数据视为文件系统中的文件。
FileTable 提供以下功能:
- FileTable 表示目录和文件的一种层次结构。它为目录和其中所含的文件存储与该层次结构中所有节点有关的数据。该层次结构以您创建 FileTable 时指定的根目录为起点。
- FileTable 中的每行表示一个文件或目录。
- 每行包含以下项:有关 FileTable 的架构的详细信息,请参阅 FileTable 架构。
- 流数据的 FILESTREAM 列以及 file_id (GUID) 标识符。(FILESTREAM 列对于目录为 NULL。)
- 用于表示和维护文件以及目录层次结构的 path_locator 列和 parent_path_locator 列。
- 10 个文件属性,如可用于文件 I/O API 的创建日期和修改日期。
- 支持针对文件和文档的全文搜索和语义搜索的类型列。
- FileTable 强制执行某些系统定义的约束和触发器以维护文件命名空间语义。
- 针对非事务性访问配置数据库时,在为 SQL Server 实例配置的 FILESTREAM 共享区下公开在 FileTable 中表示的文件和目录层次结构。这为 Windows 应用程序提供了文件系统访问方法。
FileTable 的一些其他特性包括:
- 存储在 FileTable 中的文件和目录数据通过用于非事务性文件访问的 Windows 共享区(针对基于 Windows API 的应用程序)公开。对于 Windows 应用程序,这看起来像一个包含文件和目录的普通共享区。应用程序可使用一组广泛的 Windows API,用于对此共享区下的文件和目录进行管理。
- 通过该共享区公开的目录层次结构是一个在 FileTable 中维护的纯逻辑目录结构。
- 通过该 Windows 共享区对创建或更改文件/目录的调用被 SQL Server 组件拦截并在 FileTable 中的相应关系数据中得到反映。
- Windows API 操作本质上是非事务性的,并不与用户事务关联。但是,完全支持对存储在 FileTable 中的 FILESTREAM 数据的事务性访问,就像对待常规表中的任何 FILESTREAM 列一样。
- 还可以通过常规 Transact-SQL 访问来查询和更新 FileTable。它们还与 SQL Server 管理工具和诸如备份的功能集成。
更多资料请参考:
http://technet.microsoft.com/zh-cn/library/ff929144(v=SQL.110).aspx
浙公网安备 33010602011771号