熟练应用AO2011 掌握SQL Server 2008数据引擎新增功能
肖敏(审计署重庆办)
【发布时间:2013年01月08日】
字号:【大】 【中】 【小】
    AO 2008推出之后的3年多时间,现场审计实施的要求发生了若干变化,审计署制定了《国家审计准则》,总结整理了《审计事项数据字典(试行)》;国家陆续发布企业、行政事业、总预算会计、商业银行等会计和核算软件数据接口的国家标准;AO面临的计算机技术环境也发生了一定的变化。基于上述变化,审计署于2010年下半年着手AO的升级,经过半年多的努力,于2011年推出了AO 2011。相对于AO 2008而言,AO 2011运行的软件环境发生了重大变化,后台数据库从ACCESS更新为SQL Server 2008。SQL Server 2008数据库是在SQL Server 2005 的基础上改进而来,除了完整支持Visual Studio 2008/.NET Framework 3.5 SP1后所提供的LINQ、ADO.NET Entity Data Model/Framework、ADO.NET Data Service、Sync Framework/Service等功能外,针对数据引擎本身,也新增了许多功能。下面就审计人员最常用的数据库查询分析简要介绍SQL Server 2008数据引擎新增功能:
    
    一、SQL Server 2008数据引擎新功能之新数据形态
    
    日期/时间数据类型:新增date、time、datetime2、datetimeoffset 等日期格式。另外,time、datetime2、datetimeoffset等类型的数据长度可变动,让你可在精确度与节省空间两者间选择。
    空间(Spatial)数据类型:可在数据库内结合地理资讯,并搭配空间索引(Spatial Index)的特殊阶层式索引结构,以有效存储数据。实体的数据类型分为以下两种:
    geometry (平面):符合开放式地理空间协会(Open Geospatial Consortium,OGC)的SQL简单特征规格1.1.0版,存放几何空间的X、Y等坐标数据。
    geography (测地):存储椭圆体(圆形地球)数据,例如:GPS的经纬度坐标。
    上述两种数据类型实际是通过SQL CLR编写,同时提供了丰富的函数,诸如:STLength、STArea、STStartPoint、STEndpoint、STCrosses、STWithin、STOverlaps等,让你不论是以T-SQL或是.NET程序语言开发,都可以一致的操作方式存取该资料记录或物件执行个体。
    FileStream:将大量数据通过SQL Server 存回 NTFS档案目录,而非数据库档案内。让大型数据不受限于2G位元组大小的限制,还可同时维持交易一致性、整合的管理架构,如:备份/还原、SQL Server 安全性等。
    Hierarchyid阶层结构数据类型:以SQLCLR UDT实做的特殊数据形态,预设提供许多维护阶层结构的方法。以便利操作如档案、组织阶层等结构。
    数据表类型的参数(Table-value Parameter):可以先定义数据表类型,再在预存程序声明该类型参数。在这个版本,传递数据表形态的参数是只读的。
    Sparse Column:适用于数据表的字段数量非常多,但大部分记录该字段的内容都是空的。若声明成Sparse字段,当内容是null时,完全不占空间。例如Windows Sharepoint Services在存储文管的数据时,有一大堆档案格式,每种档案格式的属性皆不同,因此有一大堆字段,对应各种不同的文件属性,当新增任一份档案时,大部分的属性字段都可以null,仅少数几栏适用于该类型档案描述的属性有设值。
    Sparse Column同时可以搭配过滤条件的索引(Filtered Index),以更省空间、更有效率的放出处理Sparse字段。
    
    二、SQL Server 2008数据引擎新功能之新索引结构
    
    空间索引(Spatial Index):对于空间地理资讯建制特殊的索引结构。
    设定过滤条件的索引:对符合Where条件的值建立索引,例如:建立索引时限制字段值不可null,则针对Sparse Column建出来的索引资料量就小很多。
    三、SQL Server 2008数据引擎新功能之T-SQL语法增强
    简化T-SQL语句的编写:可声明变量的同时初始化,并进行复合运算,例如:DECLARE @i INT=4+8。
    Values子句提供资料列构建函式:可用在单一INSERT陈述式内,同时插入多组值,例如 :
    INSERT INTO tb VALUES (1, 'Fred'), (2, 'Jim'), (3, 'Sue');
    或用在 SELECT语句:
    SELECT * FROM (VALUES (1, 'Fred'), (2, 'Jim'), (3, 'Sue')) tb(C1,C2)
    Merge语句:遵循ANSI SQL 2006 的 Merge定义并加以延伸。比较来源与目的资料后,以一句Merge语句同时完成新增、修改、删除等操作。如同单一句SQL语句自动含在交互内,通过Merge语句所有更新的资料都包在一个交互内,不像以往需明确定义交互,然后包含多句变更资料的DML语句。
    Group By 子句支持 ANSI 标准的 Grouping Sets:简化组合各种群组的语句,并可搭配 Rollup、Cube。例如,以往若要分別呈现群组不同字段,需要写如下的查询:
    use Northwind
    GO
    SELECT OrderID,NULL AS ProductID,SUM(Quantity) AS TOTAL FROM [Order Details]
    GROUP BY OrderID
    UNION ALL
    SELECT NULL AS OrderID,ProductID,SUM(Quantity) AS TOTAL FROM [Order Details]
    GROUP BY ProductID
    在SQL Server 2008后,可改成如下的写法:
    SELECT OrderID,ProductID,SUM(Quantity) AS TOTAL
    FROM dbo.[Order Details]
    GROUP BY GROUPING SETS ((OrderID), (ProductID))
    以上简要介绍了部分SQL Server 2008新增数据库引擎功能,由于SQL Server 2008的推出,对SQL Server 2000的主流支持将被终止,很多代理商会停售SQL Server 2000,微软Vista以上版本操作系统也不会支持SQL Server 2000的任何版本。因此,审计人员必须熟练掌握SQL Server 2008的各项操作,充分利用SQL Server 2008数据库对被审计单位电子数据进行全面的数据分析。(肖敏)
【关闭】    【打印】