|
我是个负责数据库应用的开发人员,昨夜和旧同事电话聊天中谈到了一个 大家共同的苦恼:因为几乎每天都要将自己的数据库项目生成SQL Scripts 以供备份存档或发给客户更新,所以生成SQL Scripts就成了每天的必修课。 而SQLSERVER的企业管理器又无法支持将生成SQL Scripts的过程保存为一个设置 文件,每次都必须做许多相同的工作, 如:选择对象呀、设置格式呀、表脚本选项、文件选项。。老是重复这样的操作 实在太麻烦了!电话闲聊完后就想:能不能写个小工具,在可以提供SQLSERVER 企业管理器所支持所有功能外,再增加个支持将各个选项的设置保存为 配置文件(如:ini或XM格式)的功能呢?这样我以后只要选取不同的配置文件就可以 直接生成出自己需要的Scripts格式,那样多好呀。。。 但如何实现Scripts的生成呢?就考虑使用下以前很少用的SQL-DMO吧! 心动不如行动,虽然夜已深,但有新鲜的体验总让我精神抖擞。。。呵呵,好了 不废话了。。就先简单地谈谈如何使用SQL-DMO来实现自己的需求吧~~~~ (代码示例使用Pascal语言表述) 1. 枚举局域网内所有的SQLSERVER实例 函数: function GetAllServerInstances :TStringList; var oApplication , oSeverNameList : Variant ; i : integer ; sNameList : TStringList ; begin sNameList := TStringList.Create ; oApplication := CreateOLEObject (''''SQLDMO.Application'''') ; oSeverNameList := oApplication.ListAvailableSQLServers ; for i:= 1 to oSeverNameList.Count do sNameList.Append (oSeverNameList.Item(i)) ; Result := sNameList ; oApplication := NULL; oSeverNameList := NULL; end; 2.登陆到指定的SQLSERVER实例 函数: function LoginServerInstances (sServer,sUser,sPassword :string):Variant; var oSQLServer : Variant ; begin oSQLServer := CreateOLEObject (''''SQLDMO.SQLServer''''); oSQLServer.LoginTimeout := 30; oSQLServer.LoginSecure := False; oSQLServer.AutoReconnect := True; oSQLServer.Connect(sServer,sUser,sPassword); Result := oSQLServer; oSQLServer := NULL ; end; 以上两个函数可以帮助我们完成取得局域网内所有的SQLSERVER实例并且 登陆上一个指定的实例。接下来就看看如何取得指定数据库的表名称和存储 过程名称 : 3.枚举指定Sqlserver实例所有database的名称 函数: function GetAllDatabaseNameList (oSQLServer : Variant ):TStringList; var sNameList : TStringList ; i : integer; begin sNameList := TStringList.Create ; for i:= 1 to oSQLServer.Databases.Count do sNameList.Append (oSQLServer.Databases.Item(i).Name) ; Result := sNameList ; end; 4.枚举指定数据库所有Table的名称 函数: function GetAllTableNameList (oSQLServer : Variant ; sDataBaseName : string ):TStringList; var oDatabase : Variant ; sNameList : TStringList ; i : integer; begin sNameList := TStringList.Create ; oDatabase := CreateOLEObject (''''SQLDMO.Database''''); oDatabase := oSQLServer.Databases.Item(sDataBaseName); for i:= 1 to oDatabase.Tables.Count do sNameList.Append (oDatabase.Tables.Item(i).Name) ; Result := sNameList ; oDatabase := Null ; end;
5.枚举指定数据库所有StoreProcedure的名称 函数: function GetAllStoreProcedureNameList (oSQLServer : Variant ; sDataBaseName : string ):TStringList; var oDatabase : Variant ; sNameList : TStringList ; i : integer; begin sNameList := TStringList.Create ; oDatabase := CreateOLEObject (''''SQLDMO.Database''''); oDatabase := oSQLServer.Databases.Item(sDataBaseName); [1] [2] 下一页 |