国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

在SQL Server 中使用SQLDMO

瀏覽:142日期:2023-10-29 12:39:35

曾幾何時,伙伴們?yōu)閿?shù)據(jù)庫的升級傷透了腦筋.往往程序的升級趕不上數(shù)據(jù)庫的升級(版本控制的好,這也許不是什么問題,但對于很大一部分中國公司來說這是無法避免的).而有些n久以前的數(shù)據(jù)庫要使用新程序的時候,數(shù)據(jù)庫的升級簡直就是無從下手.所以對比數(shù)據(jù)庫升級的緊要性就逐漸的凸現(xiàn)出來.對于表和字段的升級按道理來說是不難的,通過sysobjects與syscolumns的比較很容易的可以找到不同之處,然后增加沒有的對象即可.而對于視圖和存儲過程等非表對象的更新就有些為難了(當(dāng)然視圖和存儲過程如果用手工的辦法是很簡單的).一個在于如何生成對象腳本,另一個在于如何執(zhí)行.大家都知道syscomments表中藏有此類對象的腳本,人們肯定會優(yōu)先考慮開采這個寶庫.當(dāng)站在字符型變量最大只能存儲8000個字符時,這簡直就是一個不可逾越的障礙.人們又想從導(dǎo)出文本腳本然后執(zhí)行這個思路著手時,又發(fā)現(xiàn)從字段中取出的腳本有個天然的缺陷:換行問題.(最后發(fā)現(xiàn),這個問題也是可以解決的).萬般無奈下人們把渴望的目光集中到了SQLDMO上,她的身上總散發(fā)著無所不能的光芒.

當(dāng)Transfer對象的美妙身材展現(xiàn)在人們眼前的時候,大家都對她的美麗所折服——這不正是我們所尋找的嗎?她的動人之處就在于可以把一個數(shù)據(jù)庫的對象腳本保存在內(nèi)存中,然后連接到另一個數(shù)據(jù)庫上執(zhí)行.太棒了!現(xiàn)在我們來看看她的輪廓吧:

重要屬性:

CopyAllDefaults Boolean;;所有默認(rèn)值

CopyAllObjects; Boolean;;所有對象

CopyAllRules;;Boolean;;所有規(guī)則

CopyAllStoredProceduresBoolean;所有存儲過程

CopyAllTables;Boolean;;所有表

CopyAllTriggers Boolean;;所有觸發(fā)器

CopyAllUserDefinedDatatypes;;;Boolean;;;;所有用戶自定義類型

CopyAllViews;;Boolean;;所有視圖

CopyDataBoolean;;所有數(shù)據(jù)

DestDatabase;String;;;;目標(biāo)對象數(shù)據(jù)庫

DestLogin; String;;;;目標(biāo)數(shù)據(jù)庫登陸用戶名

DestPassword;;String;;;;目標(biāo)數(shù)據(jù)庫登陸密碼

DestServer String;;;;目標(biāo)服務(wù)器

DestUseTrustedConnection; Boolean; 用戶信任連接

DropDestObjectsFirst; Boolean;;是否先刪除目標(biāo)對象

IncludeDependenciesBoolean;;是否包含依靠對象

ScriptType; Boolean;;腳本類型

重要方法:

AddObject增加對象

AddObjectByName;通過對象名稱增加對象

好了,大家應(yīng)該對這個對象略有些了解了.對SQLDMO熟悉的人也許一下子就可以從中得到靈感,而初學(xué)者在這里恐怕還是一頭霧水.不過不用著急,具體用法我們會慢慢道來:

CREATE PROCEDURE; P_UDB --以源數(shù)據(jù)庫為模板升級目標(biāo)數(shù)據(jù)庫

(; @Source_DB; sysname;;--原數(shù)據(jù)庫

,@Des_DB;;sysname;;--目標(biāo)數(shù)據(jù)庫

,@UserNamesysname;;--用戶名

,@psw;;;;;sysname;;--密碼

)

AS

set nocount on

--/*; 局部變量聲明

declare; @ObjName;;;sysname

,@SrvID;int;;--服務(wù)器ID

,@DBsId;int;;--數(shù)據(jù)庫集ID

,@transferID;;;int;;--傳輸ID

,@SDBId;int;;--源數(shù)據(jù)庫ID

,@DDBID;int;;--目標(biāo)數(shù)據(jù)庫ID

,@SViewListID;;int;;--源數(shù)據(jù)庫視圖列表;

,@DViewListID;;int;;--目標(biāo)數(shù)據(jù)庫視圖列表;

,@str;;;Nvarhar(4000)

,@name;;sysname

,@hr;;;;int;--執(zhí)行語句返回值

,@Errorint;;;;--錯誤返回值(999:存儲過程或觸發(fā)器錯誤;9999:視圖錯誤)

--*/;;

--/*創(chuàng)建sqldmo對象; 前面我們已經(jīng)說過SQLDMO是個com,在SQL Server中使用OLE --自動化對象需要用到sp_OACreate等一系列的存儲過程,讀者如果有不明白的可以自--己查閱相關(guān)資料

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

if @hr<>0

begin

set @Error=1

goto PEnd

end

--*/

--/*連接服務(wù)器

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

if @hr<>0

begin

set @Error=2

goto PEnd

end

--*/

--/*取數(shù)據(jù)庫集

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

--*/

--/*選擇源數(shù)據(jù)庫;

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

if @hr<>0

begin

set @Error=3

goto PEnd

end

--*/

--/*選擇目標(biāo)數(shù)據(jù)庫;

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

if @hr<>0

begin

set @Error=4

goto PEnd

end

--*/

/*Tansfer屬性設(shè)置(生成三大對象)

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

上邊的存儲過程只要是介紹方法的實現(xiàn),而具體的功能比如表及字段的比較生成這里就省略了.

其實有一個大家最后也沒能解決好的問題就是對象依賴的問題.許多對象比如視圖里嵌視圖,這時生成與執(zhí)行需要有順序的.雖然有算法但有缺陷.希望讀者能可以提供好的算法.

標(biāo)簽: Sql Server 數(shù)據(jù)庫
主站蜘蛛池模板: 一区二区免费看 | 俄罗斯黄色毛片 | 国产欧美日韩成人 | 精品国产理论在线观看不卡 | 青青草国产免费一区二区 | 欧美激情伦妇在线观看 | 日本久久久久 | 欧美激情特级黄aa毛片 | 日本免费一级 | 国产一级免费片 | 国产专区一va亚洲v天堂 | 97国产成人精品视频 | 久久精品免费观看久久 | 国产手机在线视频放线视频 | 成人三级在线播放线观看 | 久久视频在线观看免费 | 免费看特黄特黄欧美大片 | 久久久久久久亚洲精品一区 | 亚洲精品午夜在线观看 | 亚洲男人的天堂在线 | 欧美成人免费一级人片 | 亚洲精品成人久久久影院 | 久草热视频在线观看 | 在线观看日本永久免费视频 | 99re6热视频精品免费观看 | swag国产精品一区二区 | 全免费a级毛片免费看视频免 | 亚洲成a人在线观看 | 97在线视频精品 | 亚洲伊人色综合网站亚洲伊人 | 国产真实乱子伦精品视手机观看 | 老头做爰xxxx视频 | 亚洲第一网站在线观看 | 免费看一毛一级毛片视频 | 亚洲男人天堂久久 | ccav在线永久免费看 | 在线一区国产 | 亚洲欧美在线观看播放 | 涩涩网站 | 美女把张开腿男生猛戳免费视频 | 6080伦理久久亚洲精品 |