打印本文 打印本文 关闭窗口 关闭窗口
使用SQL-DMO实现定制SQL Scripts
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2486  更新时间:2009/4/24 21:11:31  文章录入:mintao  责任编辑:mintao
             for i:= 1 to oDatabase.StoredProcedures.Count do
                sNameList.Append (oDatabase.StoredProcedures.Item(i).Name) ;
              Result := sNameList ;
              oDatabase := Null ;
            end; 
     
      通过以上3个函数就可以把生成Scripts前的准备工作做好了,然后就可以开始
  着重了解如何生成Scripts了。Scripts也同样是SQL-DMO某些对象的Method。这些
  对象如:Database,View ,StoredProcedure ,Trigger ,Check 等等。
  Scripts Method 的Syntax是:
    object.Script( [ ScriptType ] [, ScriptFilePath ] [, Script2Type ] ) as String
  ScriptType (integer type) 参数是来设定产生什么内容的Scripts ,如对其赋值SQLDMOScript_Default,
  这样就产生的是 该对象普通的脚本,如StoredProcedure object,那肯定就是
  其create StoredProcedure 的内容咯。如果赋值SQLDMOScript_Drops的话,
  那就产生的是drop object的内容。关于ScriptType,Script2Type (integer type)
  这个参数的详细使用可以  参阅 : C:\Program Files\Microsoft SQL Server\80\Tools\Books\sqldmo.chm
  的帮助文件。Script方法的返回值是文本类型,不管你填不填ScriptFilePath参数,
  你都能得到该文本,也就是Script 的内容。

      而Table ,UserDefinedDatatype 这两个对象生成Scripts的Method比较特殊,
  它们调用的是GenerateSQL Method,其Syntax是:
    object.GenerateSQL( Database ) as String ,比较简单没有过多的参数,返回值
  也是Script 的内容。
 
      建议:把ScriptType,Script2Type两个参数可以赋予的值做成常量,这样在程序
  中调用更直观些。如:SQLDMOScript_DatabasePermissions = 32;
  SQLDMOScript_Default = 4; ....
 
  根据上面的说明可以建立这个函数(在申明此函数时填加overload表示同名不同参函数的重载):
    file://6.生成指定Objects的Sql Scripts
    file://(oSqlObjcet : Database,View ,StoredProcedure ,Trigger ,Check)
    // sScriptFilePath defalut is ''''''''
    function GetThisObjectScripts (oSqlObjcet : Variant ;sScriptFilePath : string ;
                                   iScriptType,iScript2Type : integer) : string ;
    begin
      Result := oSqlObjcet.Script(iScriptType,sScriptFilePath,iScript2Type) ;
    end;
    file://7.生成指定Objects的Sql Scripts
      // overload Method
      file://(oSqlObjcet : Table ,UserDefinedDatatype)
    function TForm1.GetThisObjectScripts (oDatabase ,oSqlObjcet : Variant ) : string ;
    begin
      Result := oSqlObjcet.GenerateSQL(oDatabase) ;
    end;
  
  调用的时候可以根据界面选择生成什么样格式的对象就传入相应的参数
  写个简单的例子,取出master的存储过程MS_sqlctrs_users的内容:
     procedure TForm1.Button4Click(Sender: TObject);
     var
       oSQLServer,
       oDatabase,
       oStoredProcedure : Variant ;
       ReturnStr : string;
     begin
       oDatabase  := CreateOLEObject  (''''SQLDMO.Database'''');
       oSQLServer := LoginServerInstances(''''DAVID'''',''''sa'''','''''''');
       oDatabase := oSQLServer.Databases.Item(''''master'''');
       oStoredProcedure := oSQLServer.Databases.Item(''''master'''').StoredProcedures.Item(''''MS_sqlctrs_users'''');
       file://生成create procedure的Scripts,将第一个4换成1就成了drop procedure的 Scripts了
       ReturnStr := GetThisObjectScripts(oStoredProcedure,'''''''',4,4); 
       ShowMessage(ReturnStr);
     end; 

  如果多个对象都需要导出 Scripts 话,可以用个string 变量保存被循环调用的
  GetThisObjectScripts过程,就可以实现导出多个对象的脚本了!
 
 
  关于保存和取出配置生成Scripts的过程,我想不用详细描述了吧?
  只需把设置好的控件状态保存到配置文件中,并且可以调用配置文件
  反向对控件状态来设置,这样就简单的实现了自定义的过程呀。
  呵呵,到这里就进入尾声了,通过组合上面这些函数,
  并且设置合理的界面调用,这程序应该很容易完成吧~~~~
  既然这样,那让我们为提供自己工作效率而建立更多小工具呀!  
 
  更多详情,请参阅 :
  C:\Program Files\Microsoft SQL Server\80\Tools\Books\sqldmo.chm
 
 
 

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口