亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

編寫數(shù)據(jù)庫腳本

系統(tǒng) 2025 0

作者:Andrew Clinick

發(fā)表日期:2000 年 1 月 10 日

我在 “If It Moves, Script It”(英文) 這篇文章中曾談到,如何使用“Windows Script Host(WSH)”( Windows 腳本主機) 管理 Windows 和 Windows 中的應用程序。文中的大多數(shù)示例都是基于管理 Windows 操作系統(tǒng)自身的,并不基于在該操作系統(tǒng)下運行的應用程序。為迎接新千年,我想我應該談談,如何在眾多顯露可腳本化接口的應用程序中使用腳本。這次只涉及“SQL Server”。在以后的幾個月中,我將著重談 Exchange、Office 和“系統(tǒng)管理服務器”。


您可以通過使用“分布式管理對象”、“數(shù)據(jù)轉換服務”和新的“SQL Server XML”實現(xiàn),將腳本用于“SQL Server”。

許多人都能夠通過“Active Data Object(ADO)”和“Active Server Page (ASP)”技術訪問數(shù)據(jù)庫了。ADO 在幫助您查詢和更新數(shù)據(jù)庫方面做了大量的工作 — 但在備份(Y2K 問題帶給我們的警惕)或是數(shù)據(jù)庫之間的傳輸數(shù)據(jù)方面,其表現(xiàn)又如何呢?而這時就非涉及到 XML 不可了。

在此,我將告訴您如何通過使用 ADO 的伴隨技術 - 特別是“分布式管理對象”、“數(shù)據(jù)轉換服務”和新的“SQL Server XML”實現(xiàn),將腳本用于“SQL Server”。

分布式管理對象

“分布式管理對象 (DMO)”是一組 COM 對象,它將“SQL Server”數(shù)據(jù)庫和復制管理封裝在一起。這意味著您可以編寫一個 WSH 腳本,將特定表中的所有數(shù)據(jù)都復制到用制表符分隔的文件中,這有助于大量數(shù)據(jù)的移動。我之所以選擇這個示例,是因為它的代碼編寫起來簡單,但 DMO 允許您獲取“SQL Server”中的每個對象,使您能夠編寫出一些非常優(yōu)秀而有意義的管理腳本。

DMO 的關鍵是 SQLDMO.SQLServer 對象,它是基本的對象,它允許您連接到服務器并獲取所有可用對象。在這種情況下,我將使用 Database 集合來選擇數(shù)據(jù)庫,然后從 table 集合訪問要轉儲到文件的表。如果不提供數(shù)據(jù)庫,將出現(xiàn)錯誤消息,并且腳本也就結束了。如果不提供表名,腳本將在數(shù)據(jù)庫所有的表中循環(huán),并導出非系統(tǒng)表。如果提供了數(shù)據(jù)庫,它就導出該表。該示例雖然功能有限,但它為“SQL Server”提供了基于命令行的簡單的導出實用程序,您可以以它為根據(jù)。

現(xiàn)在先看一段代碼:

      '聲明與 sql 談話時使用的變量Dim oServer ' SQL Server 對象Dim oDatabase ' 要使用的目標數(shù)據(jù)庫Dim oBCP ' BCP 對象Dim nRows ' 從 bcp 返回的行數(shù)dim table ' 表對象on error resume next' 第一個參數(shù)必須是數(shù)據(jù)庫if WScript.Arguments(0) = "" then	WScript.Echo "您沒有提供要連接的數(shù)據(jù)庫"	WScript.Quitend if' 創(chuàng)建 SQL DMO 的實例Set oServer = CreateObject("SQLDMO.SQLServer")' 創(chuàng)建 SQL DMO Bulkcopy 對象的實例Set oBCP = CreateObject("SQLDMO.BulkCopy")oServer.EnableBcp = True' 登錄到本地服務器' 希望您已經更改了 sa 口令!!oServer.Connect ".", "sa" ' 連接到提供的數(shù)據(jù)庫Set oDatabase = oServer.Databases(Wscript.Arguments(0))' 將分隔符設置為逗號oBCP.ColumnDelimiter = vbComma' 將文件類型設置為以逗號分隔oBCP.DataFileType = SQLDMODataFile_CommaDelimitedCharoBCP.ImportRowsPerBatch = 1000oBCP.MaximumErrorsBeforeAbort = 1BCP.RowDelimiter = vbCrLfoBCP.ServerBCPDataFileType = SQLDMOBCPDataFile_CharoBCP.UseExistingConnection = True' 如果未提供表,則轉儲所有的表f wscript.Arguments(1) = "" then	for each table in oDatabase.tables		' 確保該表不是系統(tǒng)表		if table.systemobject = false then			oBCP.DataFilePath = table.name & ".csv"			nRows = table.ExportData(oBCP)			wscript.Echo nRows & " rows exported from " & table.name		end if	nextelse	' 設置輸出文件	oBCP.DataFilePath = wscript.Arguments(1) & ".csv" 	nRows = oDatabase.Tables(wscript.arguments(1)).ExportData(oBCP)	wscript.Echo nRows & " rows exported from " & wscript.arguments(1)end if
    

DMO 的全部內容要比本文介紹的多得多,但我希望本文能給您一些感性認識:用某些簡單的 WSH 腳本和 DMO 可以做些什么。您可以下載我的 示例(英文) 。有關 DMO 的詳細信息,請訪問 http://msdn.microsoft.com/library/psdk/sql/9_dmoc01.htm(英文)

數(shù)據(jù)轉換服務

導出到 Comma Separated 文件 (CSV),可以作為將數(shù)據(jù)導出到 SQL 和從 SQL 導入的起點,但這不象是尖端科技(太過于 20 世紀了,您不覺得嗎?)。“SQL Server 7.0”以“數(shù)據(jù)轉換服務 (DTS)”的形式,提供了相當完善的導入和導出機制。幸運的是,腳本在“SQL Server”的這個新領域中仍有一席之地,因此,您可以用“Visual Basic(R) 腳本編輯 (VBScript)”、“JScript(R)”或“Perl”的技術來擴展 DTS 的能力。

DTS 的設置非常簡單,特別是在使用“SQL ServerEnterprise Manager”的時候。在默認情況下,“SQL Server”有一個定義的文件夾,可存儲任何轉換,而且“Enterprise Manager”提供了創(chuàng)建和編輯 DTS 程序包的大的圖形用戶界面 (GUI)。在下面的示例中,我選擇了已由 sqlexport.wsf 文件創(chuàng)建的 employees.csv 文件和“SQL Server”中的一個新表。DTA 程序包將創(chuàng)建該表,加載到 Text 文件中,然后運行某個腳本,將數(shù)據(jù)轉換到“SQL Server”的表中。


DTS 程序包中的轉換,使腳本在整個轉換過程中保持運行狀態(tài)。“SQL Enterprise Manager”提供的簡單的腳本編輯器,有一個 語法分析腳本 按鈕。在運行腳本之前,該按鈕將警告您腳本中的錯誤。在轉換過程中,該腳本使用 VBScript 的 Cint 功能,將 employeeid deptid 的輸入轉換為 int ,并將所有的電子郵件地址轉換為小寫字母。

      '**********************************************************************'     Visual Basic 轉換腳本'     把每個源列復制到'     目標列'***********************************************************************Function Main()	DTSDestination("EmployeeID") = cint(DTSSource("Col001"))	DTSDestination("FirstName") = DTSSource("Col002")	DTSDestination("LastName") = DTSSource("Col003")	DTSDestination("email") = lcase(DTSSource("Col004"))	DTSDestination("extension") = DTSSource("Col005")	DTSDestination("office") = DTSSource("Col006")	DTSDestination("DeptID") = cint(DTSSource("Col007"))	Main = DTSTransformStat_OKEnd Function
    

用 DTS,能夠采用某些完善的導入/導出機制,并使您能夠在轉換的任何一步中使用腳本。重要的是,要注意腳本可能不是操作數(shù)據(jù)的最佳方式 — 尤其是您的數(shù)據(jù)集很大的話。如果您有大量數(shù)據(jù)需要轉換,而且性能也很重要,則您可能需要考慮使用 Visual Basic 或 C++ 來創(chuàng)建 COM 組件,然后從 DTS 內部調用該組件。也就是說,如果性能并不重要,并且要在數(shù)據(jù)導入/導出時對它進行轉換,則腳本為您提供了實現(xiàn)這一點的靈活機制,并使您能夠將所有代碼存儲到“SQL Server”數(shù)據(jù)庫中,使部署變得相當簡單。

關于 XML

目前,XML 看起來像是在應用程序之間共享數(shù)據(jù)的最佳工具,所以“SQL Server”的所有管理肯定都得到了 XML 的好處。編寫提取數(shù)據(jù)庫中所有數(shù)據(jù)的腳本,以及編寫用編程的方法創(chuàng)建 XML 文檔的腳本,都是可能的。但是,如果您只要查詢“SQL Server”的話,最好使它在 XML 中返回數(shù)據(jù),然后用腳本操作該 XML。“SQL Server”組最近發(fā)行了“SQL Server XML”技術的非正式版本,完全做到了這一點。

新的 XML 技術使用起來非常簡單。實際上是對服務器發(fā)出 HTTP 請求,將查詢傳遞給服務器,而服務器返回 XML。為了舉例說明,我創(chuàng)建了簡單的 WSH 腳本,它向本地機器查詢 North Wind 數(shù)據(jù)庫的雇員表中的所有數(shù)據(jù)。為訪問 XML,該腳本使用了“Internet Explorer 5.01”附帶的 XML 分析程序。此對象的美妙之處,在于它處理您所有的 HTTP 請求,并使您能夠同步調用。因為您再也不用處理任何事件驅動的程序,所以,它對編寫腳本很有幫助。

該腳本非常簡單。它創(chuàng)建了 XML 分析程序的實例,使用分析程序打開 URL,然后將結果保存為 .xml 文件。只需五行的腳本,不錯吧!

      ' 設置請求的 url xmlpath = "http://localhost/Northwind?sql=select+*+from+employees+for+xml+auto"' 創(chuàng)建“XML 分析程序”的實例 Set myXMLDoc = CreateObject("Microsoft.XMLDOM") ' 不需要異步 myXMLDoc.async = false ' 加載該 URL myXMLDoc.Load xmlpath ' 保存文檔 myXMLDoc.save "employees.xml"
    

它的強大之處在于,現(xiàn)在可很容易地與服務器建立遠程連接并轉儲數(shù)據(jù);只要更改 URL,您早已做過了。此例告訴您如何導出,但是您可以輕松地寫出導入例行程序,用 XML 分析程序在 XML 中反復操作并將值插入數(shù)據(jù)庫中。

摘要

“SQL Server”提供全面的可編寫腳本的機制,用于本地或遠程管理數(shù)據(jù)庫。DMO 和 DTS 已經上市(實際上,DMO 已發(fā)行了許多版本),所以您可以直接利用它們,使您的數(shù)據(jù)庫管理任務自動化。Windows 2000 已與“Windows Script Host 2.0”一起上市,所以以上所有腳本的運行,都不受裝有“SQL Server”的 Windows 2000 服務器的條件限制。“SQL Server”中新的 XML 技術使存取數(shù)據(jù)變得輕而易舉,從而使編寫“SQL Server”的腳本更加容易。有關“SQL Server”的詳細信息,請訪問 SQL Server Developer enter(英文)


Andrew Clinick 是“Microsoft Script Technology”組中的程序經理,機會使然,只要涉及腳本,他就可能大顯身手一番。他的大部分業(yè)余時間都花在觀看美國電視臺轉播的精彩橄欖球賽,以及向他的美國同事解說板球。

?



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=3214


編寫數(shù)據(jù)庫腳本


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 老司机午夜免费影院 | 亚色91 | 曹逼视频 | 亚洲精品区在线播放一区二区 | 99热只有精品一区二区 | 中文字幕久精品免费视频蜜桃视频 | 亚洲精品国产精品乱码不97 | 伊人久久成人 | 色婷婷久久综合中文网站 | 亚洲 国产精品 日韩 | 国产欧美日韩中文久久 | 一级骚片超级骚在线观看 | 国产xxx视频 | 国产成人看片免费视频观看 | 色午夜在线 | 九九在线偷拍视频在线播放 | 国产精品网站 夜色 | 一个色亚洲 | 日韩欧美视频一区二区在线观看 | 国产成人亚洲综合小说区 | 99精品国产综合久久久久 | 精品视频 九九九 | 99re这里只有精品国产精品 | 中国妞xxxx | 午夜在线成人 | 亚洲精品一区二区三区在 | 日日干日日 | 99高清免费国产自产拍 | 久久99精品国产99久久6男男 | 国产精品国色综合久久 | 波多野结衣高清在线播放 | 亚洲精品色一区二区三区 | 五月天精品 | 久久中文字幕视频 | 久草免费资源视频 | 亚洲国产精品免费在线观看 | 国产伦久视频免费观看视频 | 欧美成人高清视频 | 九九热视频精品 | 欧美精品福利在线视频 | 日本免费人成黄页网观看视频 |