|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
提供TCP/IP、ODBC和JDBC等多种数据库连接路径。server
曾多少时,同伴们为数据库的晋级伤透了头脑.常常程序的晋级赶不上数据库的晋级(版本把持的好,这大概不是甚么成绩,但关于很年夜一部分中国公司来讲这是没法制止的).而有些n久之前的数据库要利用新程序的时分,数据库的晋级几乎就是无从动手.以是对照数据库晋级的紧急性就渐渐的凸现出来.关于表和字段的晋级按事理来讲是不难的,经由过程sysobjects与syscolumns的对照很简单的能够找到分歧的地方,然后增添没有的工具便可.而关于视图和存储历程等非表工具的更新就有些难堪了(固然视图和存储历程假如用手工的举措是很复杂的).一个在于怎样天生工具剧本,另外一个在于怎样实行.人人都晓得syscomments表中躲有此类工具的剧本,人们一定会优先思索开采这个宝库.当站在字符型变量最年夜只能存储8000个字符时,这几乎就是一个不成超越的停滞.人们又想从导出文本剧本然后实行这个思绪动手时,又发明从字段中掏出的剧本有个自然的缺点:换行成绩.(最初发
现,这个成绩也是能够办理的).万般无法下人们把巴望的眼光会合到了SQLDMO上,她的身上总分发着无所事事的光泽.
当Transfer工具的美好身体展示在人们长远的时分,人人都对她的俊丽所服气——这不恰是我们所寻觅的吗?她的动听的地方就在于能够把一个数据库的工具剧本保留在内存中,然后毗连到另外一个数据库上实行.太棒了!如今我们来看看她的表面吧:
主要属性:
CopyAllDefaultsBoolean一切默许值
CopyAllObjectsBoolean一切工具
CopyAllRulesBoolean一切划定规矩
CopyAllStoredProceduresBoolean一切存储历程
CopyAllTablesBoolean一切表
CopyAllTriggersBoolean一切触发器
CopyAllUserDefinedDatatypesBoolean一切用户自界说范例
CopyAllViewsBoolean一切视图
CopyDataBoolean一切数据
DestDatabaseString方针工具数据库
DestLoginString方针数据库上岸用户名
DestPasswordString方针数据库上岸暗码
DestServerString方针服务器
DestUseTrustedConnectionBoolean用户信托毗连
DropDestObjectsFirstBoolean是不是先删除方针工具
IncludeDependenciesBoolean是不是包括依托工具
ScriptTypeBoolean剧本范例
主要办法:
AddObject增添工具
AddObjectByName经由过程工具称号增添工具
好了,人人应当对这个工具略有些懂得了.对SQLDMO熟习的人大概一会儿就能够从中失掉灵感,而初学者在这里生怕仍是一头雾水.不外毋须着急,详细用法我们会渐渐道来:
CREATEPROCEDUREP_UDB--以源数据库为模板晋级方针数据库
(@Source_DBsysname--原数据库
,@Des_DBsysname--方针数据库
,@UserNamesysname--用户名
,@pswsysname--暗码
)
AS
setnocounton
--/*部分变量声明
declare@ObjNamesysname
,@SrvIDint--服务器ID
,@DBsIdint--数据库集ID
,@transferIDint--传输ID
,@SDBIdint--源数据库ID
,@DDBIDint--方针数据库ID
,@SViewListIDint--源数据库视图列表
,@DViewListIDint--方针数据库视图列表
,@strNvarhar(4000)
,@namesysname
,@hrint--实行语句前往值
,@Errorint--毛病前往值(999:存储历程或触发器毛病;9999:视图毛病)
--*/
--/*创立sqldmo工具后面我们已说过SQLDMO是个com,在SQLServer中利用OLE--主动化工具必要用到sp_OACreate等一系列的存储历程,读者假如有不分明的能够自--己查阅相干材料
exec@hr=sp_oacreateSQLDMO.sqlserver,@SrvIDoutput
if@hr0
begin
set@Error=1
gotoPEnd
end
--*/
--/*毗连服务器
exec@hr=sp_oamethod@SrvID,connect,null,@@ServerName,@UserName,@psw
if@hr0
begin
set@Error=2
gotoPEnd
end
--*/
--/*取数据库集
exec@hr=sp_oagetproperty@SrvID,databases,@DBsIdoutput
--*/
--/*选择源数据库
exec@hr=sp_oamethod@DBsId,item,@SDBIdoutput,@Source_DB
if@hr0
begin
set@Error=3
gotoPEnd
end
--*/
--/*选择方针数据库
exec@hr=sp_oamethod@DBsId,item,@DDBIdoutput,@Des_DB
if@hr0
begin
set@Error=4
gotoPEnd
end
--*/
/*Tansfer属性设置(天生三年夜工具)
exec@hr=sp_oacreateSQLDMO.Transfer,@transferIDoutput
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
execsp_OADestroy@TransferID
if@hr0
begin
set@Error=10
gotoPEnd
end
*/
PEnd:
exec@hr=sp_OAMethod@SrvID,DisConnect
execsp_OADestroy@SrvID
print(@Error)
Return(@Error)
GO
上边的存储历程只需是先容办法的完成,而详细的功效好比表及字段的对照天生这里就省略了.
实在有一个人人最初也没能办理好的成绩就是工具依附的成绩.很多工具好比视图里嵌视图,这时候天生与实行必要有按次的.固然有算法但出缺陷.但愿读者能能够供应好的算法.
优化的SQL查询算法,有效地提高查询速度 |
|