最近在写的一个系统,后台数据库是MS SQL Server。
在发布的时候,由于需要生成初始化数据,因为MS SQL Server的企业管理器生成的SQL脚本不包含表数据,因此需要一个工具,可以实现根据表而生成表数据SQL脚本,找了一下,发现CodeSmith包含该功能,但用起来有点麻烦,所以干脆自己写了一共比较简便的,不能自定义表,只能在选择数据库后把全部表都生成SQL脚本,呵呵,写了2个小时,俺忙得很,有兴趣的朋友请自行下载并修改,没有版权,请随意复制、修改和传播;)
当然,如果你改进了,乐意与大家分享的话,可以上传或者发送给我,我帮你上传。
我给它起了个名字:MS SQL Server表数据脚本生成器(SmartDBScripts)。
关键思路(没有特别技术可言)是:
1、利用SqlClient访问master数据库的sysdatabases表,列举所有数据库。
2、访问目标数据库的sysobjects表(type为u,即用户表),列举所有用户表。
3、循环所有表,循环每个表的所有记录,套用自定义模板,StringBuilder累加结果。
4、利用exec sp_MSforeachtable禁止了约束,利用DBCC CHECKIDENT实现了主键列重新计算自增值,利用TRUNCATE TABLE实现了数据的完全清除等;
其中,模板的设计比较简单,共三个:
1、MSSQLTable.tpl,主模板,包括禁止/恢复约束;
2、MSSQLTable.Data.tpl,表模板,每个表的操作;
3、MSSQLTable.Data.Item.tpl,表记录模板,每条记录的操作;
其结构关系如下:
MSSQLTable--|
|-->MSSQLTable.Data
| |-->MSSQLTable.Data.Item
| |-->MSSQLTable.Data.Item
| |-->MSSQLTable.Data.Item
| |-->...
|
|-->MSSQLTable.Data
|-->MSSQLTable.Data
|-->MSSQLTable.Data
|-->...
模板是用以格式化SQL输出的,这些模板到底是怎样的,请看bin/Debug/Templates下面的几个文件。
总的来说,这个工具是quick & dirty的典型代表,能用,但不好用,原因很明确:仅仅满足我的基本需要,说得不好听,这东西有点鸡肋,哈哈,请各位天马行空,自由发挥吧。
点击下载: SmartDBScripts.zip
密码为:“unruledboy”。为什么要加密码呢?我发现文件下载似乎能给别人查找到,意思是:我只上传了某文件,但还没有对外发布连接,发现已经有好几个下载计数了,因此为了保证下载是经过正常途径的(阅读此随笔的网友),所以加了密码,给你们带来麻烦,非常抱歉。
在发布的时候,由于需要生成初始化数据,因为MS SQL Server的企业管理器生成的SQL脚本不包含表数据,因此需要一个工具,可以实现根据表而生成表数据SQL脚本,找了一下,发现CodeSmith包含该功能,但用起来有点麻烦,所以干脆自己写了一共比较简便的,不能自定义表,只能在选择数据库后把全部表都生成SQL脚本,呵呵,写了2个小时,俺忙得很,有兴趣的朋友请自行下载并修改,没有版权,请随意复制、修改和传播;)
当然,如果你改进了,乐意与大家分享的话,可以上传或者发送给我,我帮你上传。
我给它起了个名字:MS SQL Server表数据脚本生成器(SmartDBScripts)。
关键思路(没有特别技术可言)是:
1、利用SqlClient访问master数据库的sysdatabases表,列举所有数据库。
2、访问目标数据库的sysobjects表(type为u,即用户表),列举所有用户表。
3、循环所有表,循环每个表的所有记录,套用自定义模板,StringBuilder累加结果。
4、利用exec sp_MSforeachtable禁止了约束,利用DBCC CHECKIDENT实现了主键列重新计算自增值,利用TRUNCATE TABLE实现了数据的完全清除等;
其中,模板的设计比较简单,共三个:
1、MSSQLTable.tpl,主模板,包括禁止/恢复约束;
2、MSSQLTable.Data.tpl,表模板,每个表的操作;
3、MSSQLTable.Data.Item.tpl,表记录模板,每条记录的操作;
其结构关系如下:
MSSQLTable--|
|-->MSSQLTable.Data
| |-->MSSQLTable.Data.Item
| |-->MSSQLTable.Data.Item
| |-->MSSQLTable.Data.Item
| |-->...
|
|-->MSSQLTable.Data
|-->MSSQLTable.Data
|-->MSSQLTable.Data
|-->...
模板是用以格式化SQL输出的,这些模板到底是怎样的,请看bin/Debug/Templates下面的几个文件。
总的来说,这个工具是quick & dirty的典型代表,能用,但不好用,原因很明确:仅仅满足我的基本需要,说得不好听,这东西有点鸡肋,哈哈,请各位天马行空,自由发挥吧。
点击下载: SmartDBScripts.zip