动态网站制作指南
[  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库学院 > 数据库技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ 数据库技巧 ]的信息

本月文章推荐
.Sql server 2005带来的分页便利.
.远程SQL SERVER服务器备份数据到.
.SQL Server 2005代理服务应用软件.
.测试sql server业务规则链接方法.
.得出SQL语句的执行时间的方法.
.sql server 2000中循环插入100万.
.SQL server 2000存储过程 .
.连接到 SQL Server 2005 时出现的.
.SQL Server的空值处理策略.
.自动备份SQL Server数据库中用户.
.SQL中代替Like语句的另一种写法.
.安装Ms SQL Server 2005 开发版时.
.SQL Server2000数据库文件损坏时.
.比较SQL Server 2000 数据库中两.
.正确配置和使用SQL mail.
.SQL2005中部署.net 3DES加密函数.
.改善SQL Server内存管理.
.win2K3安装sql2000提示“安装程序.
.生成MSSQL Data备份的存储过程.
.设计数据库之经验谈.

在SQL Server 中使用SQLDMO

文章类别:数据库技巧 | 发表日期:2005-2-6 |


    曾几何时,伙伴们为数据库的升级伤透了脑筋.往往程序的升级赶不上数据库的升级(版本控制的好,这也许不是什么问题,但对于很大一部分中国公司来说这是无法避免的).而有些n久以前的数据库要使用新程序的时候,数据库的升级简直就是无从下手.所以对比数据库升级的紧要性就逐渐的凸现出来.对于表和字段的升级按道理来说是不难的,通过sysobjects与syscolumns的比较很容易的可以找到不同之处,然后增加没有的对象即可.而对于视图和存储过程等非表对象的更新就有些为难了(当然视图和存储过程如果用手工的办法是很简单的).一个在于如何生成对象脚本,另一个在于如何执行.大家都知道syscomments表中藏有此类对象的脚本,人们肯定会优先考虑开采这个宝库.当站在字符型变量最大只能存储8000个字符时,这简直就是一个不可逾越的障碍.人们又想从导出文本脚本然后执行这个思路着手时,又发现从字段中取出的脚本有个天然的缺陷:换行问题.(最后发现,这个问题也是可以解决的).万般无奈下人们把渴望的目光集中到了SQLDMO上,她的身上总散发着无所不能的光芒.

    当Transfer对象的美妙身材展现在人们眼前的时候,大家都对她的美丽所折服——这不正是我们所寻找的吗?她的动人之处就在于可以把一个数据库的对象脚本保存在内存中,然后连接到另一个数据库上执行.太棒了!现在我们来看看她的轮廓吧:

重要属性:

CopyAllDefaults                         Boolean             所有默认值

CopyAllObjects                          Boolean             所有对象

CopyAllRules                             Boolean             所有规则

CopyAllStoredProcedures           Boolean                    所有存储过程

CopyAllTables                            Boolean             所有表

CopyAllTriggers                         Boolean             所有触发器

CopyAllUserDefinedDatatypes      Boolean                       所有用户自定义类型

CopyAllViews                             Boolean             所有视图

CopyData                                   Boolean             所有数据

DestDatabase                                    String               目标对象数据库

DestLogin                                  String               目标数据库登陆用户名

DestPassword                             String               目标数据库登陆密码

DestServer                                 String               目标服务器

DestUseTrustedConnection          Boolean                  用户信任连接

DropDestObjectsFirst                  Boolean             是否先删除目标对象

IncludeDependencies                   Boolean             是否包含依靠对象

ScriptType                                  Boolean             脚本类型

重要方法:

AddObject                   增加对象

AddObjectByName            通过对象名称增加对象

好了,大家应该对这个对象略有些了解了.对SQLDMO熟悉的人也许一下子就可以从中得到灵感,而初学者在这里恐怕还是一头雾水.不过不用着急,具体用法我们会慢慢道来:

CREATE PROCEDURE  P_UDB --以源数据库为模板升级目标数据库

(  @Source_DB                  sysname                     --原数据库

  ,@Des_DB                     sysname                     --目标数据库

  ,@UserName                   sysname                     --用户名

  ,@psw                        sysname                     --密码

 )

 AS

set nocount on

--/*  局部变量声明

declare  @ObjName              sysname

                 ,@SrvID            int                     --服务器ID

                 ,@DBsId            int                     --数据库集ID

                 ,@transferID      int                     --传输ID

                 ,@SDBId            int                     --源数据库ID

                 ,@DDBID            int                     --目标数据库ID

                 ,@SViewListID     int                     --源数据库视图列表 

                 ,@DViewListID     int                     --目标数据库视图列表 

                 ,@str              Nvarhar(4000)

                 ,@name             sysname

                 ,@hr               int                    --执行语句返回值

                 ,@Error           int                       --错误返回值(999:存储过程或触发器错误;9999:视图错误)

--*/            

--/*创建sqldmo对象  前面我们已经说过SQLDMO是个com,在SQL Server中使用OLE --自动化对象需要用到sp_OACreate等一系列的存储过程,读者如果有不明白的可以自--己查阅相关资料

exec @hr=sp_oacreate 'SQLDMO.sqlserver',@SrvID output

if @hr<>0

begin

  set @Error=1

  goto PEnd

end

--*/

--/*连接服务器

exec @hr=sp_oamethod @SrvID,'connect',null,@@ServerName,@UserName,@psw

if @hr<>0

begin

  set @Error=2

  goto PEnd

end

--*/

--/*取数据库集

exec @hr=sp_oagetproperty @SrvID,'databases',@DBsId output

--*/

--/*选择源数据库   

exec @hr=sp_oamethod @DBsId,'item',@SDBId output,@Source_DB

if @hr<>0

begin

  set @Error=3

  goto PEnd

end

--*/

--/*选择目标数据库   

exec @hr=sp_oamethod @DBsId,'item',@DDBId output,@Des_DB

if @hr<>0

begin

  set @Error=4

  goto PEnd

end

--*/

/*Tansfer属性设置(生成三大对象)

exec @hr=sp_oacreate         'SQLDMO.Transfer',@transferID output

exec @hr=sp_oasetproperty   @transferID,'DestServer',@@ServerName

exec @hr=sp_oasetproperty   @transferID,'DestLogin',@UserName

exec @hr=sp_oasetproperty   @transferID,'DestPassword ',@psw

exec @hr=sp_oasetproperty   @transferID,'DestDatabase',@des_DB

exec @hr=sp_oasetproperty   @transferID,'DropDestObjectsFirst ',1

exec @hr=sp_oasetproperty   @transferID,'CopyAllStoredProcedures ',1

exec @hr=sp_oasetproperty   @transferID,'CopyAllTriggers',1

exec @hr=sp_oasetproperty   @transferID,'CopyAllViews',1

--exec @hr=sp_oasetproperty   @transferID,'ScriptType ',1 这里大家可以试试这个属性

exec @hr=sp_oamethod  @DDBId,'Transfer ',null,@transferID

exec sp_OADestroy @TransferID 

if @hr<>0

  begin

    set @Error=10

    goto PEnd

  end

*/

PEnd:

  exec @hr = sp_OAMethod @SrvID, 'DisConnect' 

  exec sp_OADestroy @SrvID 

  print (@Error)

  Return (@Error)

GO

    上边的存储过程只要是介绍方法的实现,而具体的功能比如表及字段的比较生成这里就省略了.

    其实有一个大家最后也没能解决好的问题就是对象依赖的问题.许多对象比如视图里嵌视图,这时生成与执行需要有顺序的.虽然有算法但有缺陷.希望读者能可以提供好的算法.


上一篇:SQL Server 2005: 利用新的ranking函数实现高效的数据分页操作 人气:15911
下一篇:SQL Server补丁版本的检查和安装过程中常见问题 人气:13339
点击此处浏览全部SQL Server的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-5-11 东旭网络问卷调查系统 v2.4 Beta2
2008-5-11 非零坊『留言本』 v3.3.1
2008-5-11 e新时代企业网站管理系统 v6.0 S
2008-5-11 依悠广告管理系统 v2.1
2008-5-11 Gxjss留言本 v1.0
2008-5-11 深圳公交车线路查询系统 v1.0
2008-5-11 麦群网整站程序 (080510版)
2008-5-11 杰奇小说连载系统 v1.1
2008-5-11 小型FLASH+ASP+XML的新闻发布系统
2008-5-7 Windows XP SP3 官方英文版
2008-5-7 Windows XP SP3 官方香港中文版
2008-5-7 Windows XP SP3 官方繁体中文版
2008-5-7 Windows XP SP3 官方简体中文版
2008-4-30 Multiple Unzip Wizard 1.02
2008-4-30 Multiple Unrar Wizard 1.0.0
2008-4-30 WinZip Install/Try/Uninstall a
2008-4-30 ZIP压缩文件修复器WzipFix 2.0
2008-4-30 Pentazip 6.01 Build 189 For Wi
  发表评论
姓 名: 验证码: [ 全部贴吧 ] [ 浏览评论 ]
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報