SQL Server的奥妙与快捷

作 者:

作者简介:
王长清,山西省襄垣县审计局

原文出处:
中国审计

内容提要:


期刊代号:V3
分类名称:审计文摘
复印期号:2012 年 02 期

关 键 词:

字号:

      金审工程在山西省襄垣县审计部门已开展6年,AO审计实施系统也得到了初步应用,但要真正深入、广泛应用到审计项目中,还存在一定的困难和差距,计算机中级培训给我们送来了一把“金钥匙”。本人有幸参加了山西省审计厅举办的第三期计算机中级培训班,并将所学知识主动应用于审计项目,体会到SQL Server的奥妙与快捷。

      认真调查摸清环境

      以笔者参加的某县两类养老保险为例,一类是城镇职工养老保险,一类是新型农村养老保险,两类保险财务数据采用不同版本的用友财务软件,业务数据各自有不同的操作平台,后台数据库服务器分别储存在市级和省级,被审计单位没有相应的系统管理人员,要想在海量的数据面前快速准确查找出问题,只有充分发挥计算机审计的作用,才能完成审计任务。

      小试牛刀初见成效

      财务数据的采集转换共用三种方法。一是利用用友财务软件备份功能采集。由于AO系统没有相应的模板,无法导入AO系统。二是进入被审计单位后台数据库,备份数据库文件或导出所需表。因新农保后台数据库无法进入,此方法只能导入城镇职工养老保险财务数据。三是利用ODBC访问技术接口访问新农保财务后台数据库,导出Access或Excel形式,再导入AO系统。通过这三种方法,成功将被审单位财务数据导入AO系统。

      深入探索收获颇丰

      (一)采集电子数据

      一是采集城镇职工养老保险数据。因后台数据库由市级管理,无法完整采集全部数据库,利用操作平台导出城镇参保单位基本信息表和城镇参保人员基本信息表,被审计单位未全部实行养老保险发放软件化,只采集到Excel形式的发放表。二是采集新农保养老保险数据。因后台数据库由省级管理,无法完整采集全部数据库,只能利用操作平台导出新农保参保人员基本信息表,同样采集到Excel形式的发放表。三是到公安部门户籍科采集所需户籍数据。分别采集某一时点60周岁以上死亡的非农户表和农户表。四是利用SQL Server2008数据库软件导入/导出功能将上述采集到的数据表导入已建好的数据库中。

      (二)审计分析步骤

      1.查询是否存在未满16周岁和满60周岁仍参保人员,是否存在重复参保人员。

      (1)验证身份证号码的有效性,有无存在不是15或18位的信息

      select*from城镇职工参保表

      where len(身份证号码)<>15 and len(身份证号码)<>18

      select*from新农保人员表

      where len(身份证号码)<>15 and len(身份证号码)<>18

      (2)从身份证号码中提取出生日期

      select*,cast(substring(身份证号码,7,4)+'-'+substring(身份证号码,11,2)+'-'+substring(身份证号码,13,2)as datetime)

      出生日期from城镇职工参保表

      select*,cast(substring(身份证号码,7,4)+’-’+substring(身份证号码,11,2)+'-'+substring(身份证号码,13,2)as datetime)

      出生日期from新农保人员表

      (3)筛选是否存在未满16周岁或已满60周岁参保人员,假如审计截止时间为2010年12月31日,通过筛选得出部分不合规参保人员

      select*into不合规城镇参保人员from城镇职工参保表

      where出生日期not between‘1950-12-31’and‘1994-12-31’

      select*into不合规新农保参保人员from新农保人员表

      where出生日期not between‘1950-12-31’and‘1994-12-31’

      (4)以身份证号码为关键字核对新开展的新农保发现存在部分重复参加养老保险人员

      select*into重复参加养老保险from新农保人员表

      where身份证号码in(select身份证号码from城镇职工参保表)

      2.比对死亡人员、城镇发放表、新农保发放表,是否存在死亡人员仍在领取养老金,是否存在重复领取养老保险人员

      (1)统计身份证号码次数,是否存在一人重复领取现象

      select身份证号码,姓名,count(*)重复次数from城镇发放表

      group by身份证号码,姓名having count(*)>1

      select身份证号码,姓名,count(*)重复次数from

      新农保发放表group by身份证号码,姓名having count(*)>1

      (2)比对城镇发放表和新农保发放表,是否存在重复领取人员

      select*into重复领取养老保险from新农保发放表

      where身份证号码in(select身份证号码from城镇发放表)

相关文章: