对于项目中,给客户安装后,后期的功能修改会涉及到一些表结构的调整。由于客户的层次高低不同,还有一些无法直接发sql文件线客户自己执行,特别是一些加密的存储过程。故开发了一个sql语句执行的小工具给客户使用。其中最经常用到的就是执行sql文件。
方法是:把执行的列表与sql文件都放到资源文件中,程序直接读取执行。文件也可以经过加密与解解。每次给客户发送更新的执行程序,或者客户直接从网上进行下载更新。
执行分两种,
1、少量的结构表调整,写成sql语句的形式直接调用执行。
2、涉及到存储过程或复杂的结构与数据调整,则写在sql文件,然后读取执行。
问题:
1、go是分析器的一个命令,写到sql文件中,在执行时会报错。
2、对于create table和create procedure等必须是在执行语句中的第一句,否则也会报错。
问题解决也很简单,就是在sql文件中使用特殊的分隔字符,把多个sql语句分隔开来按顺执行。一般在分析器中都会使用到go,所以也可以把go进行分隔字符来分隔sql执行串。
string[] sqls= Regex.Split(sql, "GO", RegexOptions.IgnoreCase);
由于Go一般在语句中都单独一行,比较稳妥的方式如下:
string[] sqls= Regex.Split(sql, @"/r/nGO/r/n", RegexOptions.IgnoreCase);
其它的编写都比较简单。