资源描述
巧用 SQL 语言批量建立金蝶 K3 账套 2012-02-28 19:22:38 来源 :中国管理信息化 作者 : 点击 数 :242 次 评论 :0 条 关键词 :金蝶 ERP SQL 语言 实验室实验教学是学校本科教学培养方案和教学计划的重要环 节,随着各高校对应用型和创新型人才培养的重视,目前绝大部分的经管类院校都开设了 ERP 实验课程以加强应用型人 才的培养 ,ERP 实验室成为经管类学院的各个专业开展专业 综合性实验和校内模拟实习的基地 ?因为金蝶 K3 单机版对计 算机的配置要求较高 ,并且实验计算机安装有硬盘还原卡 ,学 生每次实验时需进行恢复 ?拷贝和备份冗长的过程 ,所以我院 实验室在实验教学中采用 K3 网络版 ,在 K3 服务器上为每位 实验学生建立一个账套 ,由于 ERP 课程面向各个专业的学生 , 需建的账套的类型和数量有很多 ,如我院实验室一学期需建 400 多个各种类型 (如标准财务 ?标准供应链 ?人力资源等 )的 实验账套 ?建立账套是一个重复和非常耗费时间的过程,随着账套数的不断增多 ,建账的速度也越来越慢 ,建立一个账套需 近 40 多分钟的时间 ,建上百个账套需要专人几周的时间 ?为解 决建立 K3 实验账套效率非常低的问题 ,经过摸索本文通过 SQL 语言来快速 ?简便地完成金蝶 K3 账套的批量建立 ?1基于 SQL 语言的建库方式金蝶 K3 是基于三层客户 /服务器 (C/S 模式),用户通过客户 端和中间层连接 K3 后台数据库的服务器来实现业务操作?当用户使用 K3 的账套管理工具建立账套时 ,实际上是程序使用 SQL 数据库管理语言对其后台数据库进行数据操作,因此可在 K3 建立账套时打开 SQL 数据库的 SQL Server Profiler 来 跟踪和分析 SQL 建库的命令 ?通过对 SQL Profiler 记录的 SQL 语句的分析可得出 K3 账套管理建库的步骤 :1.1 建立数据库通过对 SQL 语句的分析可发现 ,K3 建账时实际是调用了 SQL 语言的 RESTORE DATABASE 数据库恢复命令 ,该命令 以恢复 K3 预置的数据库备份文件的方式新建一个账套的数 据库,其SQL命令为:RESTORE DATABASE AIS201102081015 from disk= D:SCM.bakwith recovery,moveSCM102SP2_DataK3t-oDATAD:AIS201102081015_Data.mdf ,move SCM102SP2_logto D:AIS201102081015_log.ldf ,replaceRESTORE DATABASE 命令把 SCM.bak 备份文件恢复成 新的数据库 AIS 201102081015,其中 D:K3-DATA 是新建账套 的数据库存放路径 ? SCM.bak 是标准供应链解决方案类型的 账套备份文件 ,SCM102SP2_Data 和 SCM102SP2_Log 为它的数据库文件和数据库日志文件 ?K3 提供了标准供应链 ?标准 财务 ?人力资源 ?集团财务等 8 种账套类型 ,这些账套类型以数 据库备份压缩文件的形式存放在 D:Program FilesKingdeeK3ERPDBFILE( 假定金蝶的安装目录在 D 盘 ) 中,其文件名为 :ADCA?SCM?GFI?HR 等 9 个压缩文件 ?当用 户建立某个类型账套如选择集团财务解决方案时,程序会先调用 SQL 命令解压 GFI.RAR 文件 ,然后再以 RESTORE DATABASE 命令把 GFI.bak 数据库备份文件中的 GFI102SP2_Date 数据库文件和 GFI102SP2_Log 数据库日志 文件恢复到新的数据库文件 ?在建立不同账套类型时只需选 用对应的备份文件和修改参数 Move 后接的文件名 ,如建立战 略人力资源类型账套则把数据库备份文件改为HR.bak, 参数move 后两个文件分别改为 HR102SP2_data 和 HR102SP2_log?为了更快捷和统一地建立学生实验账套 ,可采用 K3 账套管 理中恢复账套的方式来新建账套 ?其方法是先建立一个账套 类型的账套作为模板 ,完成账套属性及账套的用户 ?数据权限 等方面的设置后备份该账套 ?建立相同类型的账套时采用恢 复账套命令 ,选取账套备份文件后输入新账套号和账套名来 完成账套的新建 ?这种恢复建账方法比新建账套的方法速度 快很多 ,假定 E:K3-backupFtc.bak 为建账模板的备份文件 ,恢 复账套的 SQL 语句为 :RESTORE DATABASE AIS20110420070623 fromdisk= E:Ftc.bak with recovery,move SCM102SP2_Datato E:AIS20110420070623_Data.mdf ,move SCM102SP2_log to E: AIS20110420070623_log.ldf,replace可在 SQL Server Management studio 的数据库查询窗口中执行上述 SQL 语句,以下是数据库查询窗口完成数据库新建 后的返还信息 :已为数据库 AIS20110420070623 ,文件SCM102SP2_Data (位于文件1上)处理了 28 496页?已为数 据库AIS20110420070623 ,文件SCM102SP2_log (位 于文件1上)处理了 7页?RESTORE DATABASE 成功处理了 28 503 页,花费 18.867 秒(12.375 MB/ 秒)?从返还信息中可看出 ,采用恢复账套的方式建立数据库的 速度要快得多 ?1.2在Master数据库中注册账套账套的后台数据库建立后 ,还必须在 SQL 数据库的 Master数据库的t_kdaccount_gl表中建立新账套的记录 ?Master数据库是 SQL Server 系统最重要的系统库 ,它记录了 SQL Server 系统的所有系统信息 ,包括所有的登录信息 ?系统设置信 息?SQL Server的初始化信息和其他系统数据库及用户数据库的相关信息 ?使用以下 SQL 语句完成 t_kdaccount_gl 表的 新账套记录 :insert into t_KDAccount_gl(CAcc_Name,CDbName,DBuildDate,cdbversi on) values( st2 , AIS2011020810-0125-08, 230.101 )该 SQL 语句在表 t_KDAccount_gl 中按顺序插入账套名 ? 数据库实体名 ?建立账套日期和版本号的字段记录 ?1.3 在 K3 系统中注册账套账套数据库的建立和在 Master 数据库中注册后 ,仍需在账 套管理中重新注册账套才能正常使用 ?注册方法 :打开 K3 账 套管理工具 ,选择菜单数据库 /注册账套 ,在注册窗口中先选择 数据库实体 ,在弹出的账套列表中选择已建立的账套名称和 数据库实体后在返回的注册窗口中输入账套号即可完成账 套的注册 ,注册后就可正常使用新建账套了 ?2 批量建立账套掌握了 K3 的 SQL 建账方法后 ,可采用 Transact-SQL 语言 快速 ?简便地大批量地建立学生实验账套 ?假定需为实验准备 200 个账套 ,首先在 K3 账套管理中建立账套并备份该账套 ,然 后使用 SQL 的条件循环流程控制语句 ,在 begin end 之间循环 重复执行 RESTORE DATABASE 新建账套和在 t_KDAccount_gl 表插入新账套记录 ,当新建账套数满足 200 个条件时退出循环 ?假定作为模板的账套类型为标准财务解决方案 ,其备份文件存放在 E:k3_backup 目录下 ,备份文件名 为 Ftc.bak,K3 新建账套时其数据库实体名是建库时系统自动 生成,如AIS20110208112545为前缀AIS,后面加上建库时系 统的日期和时间 ,具有唯一性 ?批量建库采用手工指定方法,前缀AIS后加上数字顺序如 AIS1?AIS2,账套名为前缀st后加后 数字顺序即st1?st2?循环批量建立实验账套的SQL语句为:declare ztvarchar(255) /* 设置账套的账套号 */declare i intdeclare nvarchar(255) /* 设置账套数据库的实体名称 */ declare p1varchar(255) /* 设置账套的数据库文件的存放 路径*/declare p2varchar(255) /* 设置账套数据库的日志文件存 放路径 */set i=1while i 200 /* 需建 1 至U 200 个账套 */beginset n=AIS+cast(i as varchar(255) /*账套数据库名为 AIS 加 1-200后缀*/set p1= e:+AIS+cast(i asvarchar(255)+ _Data.mdf /*数据库文件存放在 E:K3_data 目录下 ,文件名为 AIS 后缀数字如 AIS1_data.mdf*/varchar(255)+ _log.ldf /*数据库的日志文件存放在 E:K3_data 目录下 , 文件名为AIS 后缀数字如 AIS1_log.ldf*/set zt= ST +cast(i as varchar(255)RESTORE DATABASE nfromdisk= E:Ftc.bak with recovery,move STDFI102SP2_Data to , p1move STDFI102SP2_LOG to p2, replace /*以预先设置好的 Ftc.bak 账套备份文件为母版新建账套 */ insert intot_KDAccount_gl(CAcc_Name,CDbName,DBuildDate,cdbversi on) values(zt,n,getdate(), 3.0 )/*在t_kdaccount_gl表中插入新账套记录,getdate()为SQL日期函数 ,取当前系统时期 */set i=i+1end用户可以在服务器空闲的时间如晚上计划执行上述批量建库的 SQL 语句,让服务器在空闲时间里自动完成 200 个账 套的数据库建库工作 ,然后再使用 K3 的账套管理工具中的注 册账套完成新账套的注册 ?3结语建立上百个金蝶实验账套是一个烦琐?费时的过程 ,尤其是当账套数达到一定数量后 ,专人建立实验账套一天才完成十 几个账套 ,效率相当低 ?采用 SQL 语言自动批量完成账套后台 数据库的建立 ,而手工注册账套只需几分钟的时间 ,使建账变 得快捷 ?轻松 ?SQL 作为强大的关系数据库管理语言 ,在用友 U8?金蝶K3等财务软件的实验数据管理和维护中,运用SQL 语言可达到事半功倍效果 ,使我们的工作更快捷 ?简便和富有 效率?附录: RESTORE 语法:-To Restore an Entire Database from a Full database backup (a Complete Restore):RESTORE DATABASE database_name | database_name_var FROM <backup_device> ,.n WITH RECOVERY | NORECOVERY | STANDBY =standby_file_name | standby_file_name_var | , <general_WITH_options> ,.n | , <replication_WITH_option>| , <change_data_capture_WITH_option>| , <FILESTREAM_WITH_option>| , <service_broker_WITH options>| ,<point_in_time_WITH_options RESTORE_DATABASE& gt; ,.n ;-To perform the first step of the initial restore sequence- of a piecemeal restore: RESTORE DATABASE database_name | database_name_var <files_or_filegroups> ,.n FROM <backup_device> ,.n WITHPARTIAL, NORECOVERY , <general_WITH_options> ,.n | ,<point_in_time_WITH_options RESTORE_DATABASE& gt; ,.n ;-To Restore Specific Files or Filegroups:RESTORE DATABASE database_name | database_name_var <file_or_filegroup> ,.n FROM <backup_device> ,.n WITH RECOVERY | NORECOVERY , <general_WITH_options> ,.n ,.n ;-To Restore Specific Pages:RESTORE DATABASE database_name | database_name_var PAGE = file:page ,.n , <file_or_filegroups> ,.n FROM <backup_device> ,.n WITH NORECOVERY , <general_WITH_options> ,.n ;-To Restore a Transaction Log:RESTORE LOG database_name | database_name_var <file_or_filegroup_or_pages> ,.n FROM <backup_device> ,.n WITH RECOVERY | NORECOVERY | STANDBY = standby_file_name | standby_file_name_var | , <general_WITH_options> ,.n | , <replication_WITH_option>| ,<point_in_time_WITH_options RESTORE_LOG> ,.n ;-To Revert a Database to a Database Snapshot:RESTORE DATABASE database_name | database_name_var FROM DATABASE_SNAPSHOT = database_snapshot_name<backup_device>:= logical_backup_device_name |logical_backup_device_name_var | DISK | TAPE = physical_backup_device_name |physical_backup_device_name_var <files_or_filegroups>:=FILE = logical_file_name_in_backup | FILEGROUP = logical_filegroup_name | logical_filegroup_name_var | READ_WRITE_FILEGROUPS <general_WITH_options> ,.n :=-Restore Operation Options MOVE logical_file_name_in_backup TOoperating_system_file_name ,.n | REPLACE| RESTART| RESTRICTED_USER -Backup Set Options| FILE = backup_set_file_number | backup_set_file_number | PASSWORD = password | password_variable -Media Set Options| MEDIANAME = media_name | media_name_variable | MEDIAPASSWORD = mediapassword | mediapassword_variable | BLOCKSIZE = blocksize | blocksize_variable -DataTransfer Options| BUFFERCOUNT = buffercount | buffercount_variable | MAXTRANSFERSIZE = maxtransfersize |maxtransfersize_variable -Error Management Options| CHECKSUM | NO_CHECKSUM | STOP_ON_ERROR | CONTINUE_AFTER_ERROR -Monitoring Options| STATS = percentage -Tape Options| REWIND | NOREWIND | UNLOAD | NOUNLOAD <replication_WITH_option>:=| KEEP_REPLICATION<change_data_capture_WITH_option>:=| KEEP_CDC<FILESTREAM_WITH_option>:=| FILESTREAM ( DIRECTORY_NAME =directory_name )<service_broker_WITH_options>:=| ENABLE_BROKER| ERROR_BROKER_CONVERSATIONS| NEW_BROKER<point_in_time_WITH_options RESTORE_DATABASE& gt;:=STOPAT = datetime| datetime_var | STOPATMARK = lsn:lsn_number AFTER datetime| STOPBEFOREMARK = lsn:lsn_number AFTER datetime<point_in_time_WITH_options RESTORE_LOG>:= | STOPAT = datetime| datetime_var | STOPATMARK = mark_name | lsn:lsn_number AFTER datetime| STOPBEFOREMARK = mark_name | lsn:lsn_number AFTER datetime
展开阅读全文