上周接到一个需求,帮客户初始化权限模块的数据(包括用户,角色,模块以及三者之间的关系,还有用户与用户的关系,角色与角色的关系,模块与模块的关系),看了需求后一头雾水,幸好客户提供的是excel表格,但数据分布在两个工作表里,要把它拆分出来并不容易~~~

就像这样的格式(这是角色和上级角色)
一个一个写显然是行不通的,想到前几天刚用游标做了一个循环Parent的脚本,这个是不是也可以用游标来遍历客户给的数据然后按我需要的格式生成脚本呢,答案是肯定的。
首先把初始数据处理一下(去掉一些空纪录,整理一下表头 Supervisor - Role 改成 SupervisorRole等)导入数据库(表名RoleData),接着开始用游标定制初始脚本...
就以Role表为例吧
Declare @SQL varchar(8000),
@RoleName varchar(100)
SET @SQL = ''
DECLARE RoleCursor CURSOR FOR

SELECT[Role] FROM RoleData --需要遍历的数据
 OPEN RoleCursor
 FETCH NEXT FROM RoleCursor INTO @RoleName
 WHILE @@FETCH_STATUS=0
 BEGIN  
  SET @SQL = 'INSERT INTO Roles (RoleName) '
  SET @SQL = @SQL+'Values('''+@RoleName+''') ;'
  print @SQL
  FETCH NEXT FROM RoleCursor INTO @RoleName
 END
 CLOSE RoleCursor
DEALLOCATE RoleCursor

这样就把Role数据导入完成了,接着就是Role和Role的关系了(Supervisor - Role)
写法和这个差不多,不过会复杂一些,具体实现可以下载附件分析
当然把所有需要的脚本整到一个游标里是比较好的办法了
详细的脚本在附件里,包括创建Roles脚本和Excel文档以及这两个游标的脚本...
附件: /Files/beal/InitRole.rar