麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-11-18 20:54:04
字體:
供稿:網(wǎng)友
作者:Andrew Clinick
我在“If It Moves, Script It”(英文)這篇文章中曾談到,如何使用“Windows Script Host(WSH)”( Windows 腳本主機(jī)) 管理 Windows 和 Windows 中的應(yīng)用程序。文中的大多數(shù)示例都是基于管理 Windows 操作系統(tǒng)自身的,并不基于在該操作系統(tǒng)下運(yùn)行的應(yīng)用程序。為迎接新千年,我想我應(yīng)該談?wù)劊绾卧诒姸囡@露可腳本化接口的應(yīng)用程序中使用腳本。這次只涉及“SQL Server”。在以后的幾個月中,我將著重談 Exchange、Office 和“系統(tǒng)管理服務(wù)器”。

您可以通過使用“分布式管理對象”、“數(shù)據(jù)轉(zhuǎn)換服務(wù)”和新的“SQL Server xml”實(shí)現(xiàn),將腳本用于“SQL Server”。
許多人都能夠通過“Active Data Object(ADO)”和“Active Server Page (asp)”技術(shù)訪問數(shù)據(jù)庫了。ADO 在幫助您查詢和更新數(shù)據(jù)庫方面做了大量的工作 — 但在備份(Y2K 問題帶給我們的警惕)或是數(shù)據(jù)庫之間的傳輸數(shù)據(jù)方面,其表現(xiàn)又如何呢?而這時就非涉及到 XML 不可了。

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

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

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

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

'聲明與 sql 談話時使用的變量
Dim oServer ' SQL Server 對象
Dim oDatabase ' 要使用的目標(biāo)數(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.Quit
end if
' 創(chuàng)建 SQL DMO 的實(shí)例
Set oServer = CreateObject("SQLDMO.SQLServer")
' 創(chuàng)建 SQL DMO Bulkcopy 對象的實(shí)例
Set oBCP = CreateObject("SQLDMO.BulkCopy")
oServer.EnableBcp = True
' 登錄到本地服務(wù)器
' 希望您已經(jīng)更改了 sa 口令!!
oServer.Connect ".", "sa" 
' 連接到提供的數(shù)據(jù)庫
Set oDatabase = oServer.Databases(Wscript.Arguments(0))

' 將分隔符設(shè)置為逗號
oBCP.ColumnDelimiter = vbComma
' 將文件類型設(shè)置為以逗號分隔
oBCP.DataFileType = SQLDMODataFile_CommaDelimitedChar
oBCP.ImportRowsPerBatch = 1000
oBCP.MaximumErrorsBeforeAbort = 1
BCP.RowDelimiter = vbCrLf
oBCP.ServerBCPDataFileType = SQLDMOBCPDataFile_Char
oBCP.UseExistingConnection = True
' 如果未提供表,則轉(zhuǎn)儲所有的表
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
next
else
' 設(shè)置輸出文件
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 的全部內(nèi)容要比本文介紹的多得多,但我希望本文能給您一些感性認(rèn)識:用某些簡單的 WSH 腳本和 DMO 可以做些什么。您可以下載我的示例(英文)。有關(guān) DMO 的詳細(xì)信息,請?jiān)L問 http://msdn.microsoft.com/library/PSDk/sql/9_dmoc01.htm(英文)。 

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

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

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

'**********************************************************************
'     Visual Basic 轉(zhuǎn)換腳本
'     把每個源列復(fù)制到
'     目標(biāo)列
'***********************************************************************
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_OK
End Function
用 DTS,能夠采用某些完善的導(dǎo)入/導(dǎo)出機(jī)制,并使您能夠在轉(zhuǎn)換的任何一步中使用腳本。重要的是,要注意腳本可能不是操作數(shù)據(jù)的最佳方式 — 尤其是您的數(shù)據(jù)集很大的話。如果您有大量數(shù)據(jù)需要轉(zhuǎn)換,而且性能也很重要,則您可能需要考慮使用 Visual Basic 或 C++ 來創(chuàng)建 COM 組件,然后從 DTS 內(nèi)部調(diào)用該組件。也就是說,如果性能并不重要,并且要在數(shù)據(jù)導(dǎo)入/導(dǎo)出時對它進(jìn)行轉(zhuǎn)換,則腳本為您提供了實(shí)現(xiàn)這一點(diǎn)的靈活機(jī)制,并使您能夠?qū)⑺写a存儲到“SQL Server”數(shù)據(jù)庫中,使部署變得相當(dāng)簡單。

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

新的 XML 技術(shù)使用起來非常簡單。實(shí)際上是對服務(wù)器發(fā)出 HTTP 請求,將查詢傳遞給服務(wù)器,而服務(wù)器返回 XML。為了舉例說明,我創(chuàng)建了簡單的 WSH 腳本,它向本地機(jī)器查詢 North Wind 數(shù)據(jù)庫的雇員表中的所有數(shù)據(jù)。為訪問 XML,該腳本使用了“Internet Explorer 5.01”附帶的 XML 分析程序。此對象的美妙之處,在于它處理您所有的 HTTP 請求,并使您能夠同步調(diào)用。因?yàn)槟僖膊挥锰幚砣魏问录?qū)動的程序,所以,它對編寫腳本很有幫助。

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

' 設(shè)置請求的 url 
xmlpath = "http://localhost/Northwind?sql=select+*+from+employees+for+xml+auto"
' 創(chuàng)建“XML 分析程序”的實(shí)例 
Set myXMLDoc = CreateObject("Microsoft.XMLDOM") 
' 不需要異步 
myXMLDoc.async = false 
' 加載該 URL 
myXMLDoc.Load xmlpath 
' 保存文檔 
myXMLDoc.save "employees.xml"
它的強(qiáng)大之處在于,現(xiàn)在可很容易地與服務(wù)器建立遠(yuǎn)程連接并轉(zhuǎn)儲數(shù)據(jù);只要更改 URL,您早已做過了。此例告訴您如何導(dǎo)出,但是您可以輕松地寫出導(dǎo)入例行程序,用 XML 分析程序在 XML 中反復(fù)操作并將值插入數(shù)據(jù)庫中。

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




發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品久久久久久久久久久天堂 | 久久影院yy6080 | 精国产品一区二区三区 | 毛片天天看 | 在线播放免费视频 | 欧美日韩在线播放一区 | 在线观看视频毛片 | 久久艹艹艹 | 久久蜜桃香蕉精品一区二区三区 | 亚洲一二区视频 | 精精国产xxxx视频在线野外 | 久久网国产精品 | 99亚洲伊人久久精品影院红桃 | 国产免费高清 | 欧美大屁股精品毛片视频 | 色淫影院 | 亚洲天堂午夜 | 综合网天天射 | 国产精品视频一区二区三区四区五区 | 国产精品视频专区 | 一级毛片播放 | 一级黄色毛片a | 中文字幕在线观看免费视频 | 中文日产幕无线码6区免费版 | 在线成人www免费观看视频 | 99成人在线 | 极品一级片 | 狠狠色成色综合网 | 在线播放免费人成毛片乱码 | 国产精品久久久久久久久久三级 | 成年人网站国产 | 亚洲网站在线观看 | 亚洲成人午夜精品 | 国产精品视频在 | 日韩大片在线永久观看视频网站免费 | 涩涩激情网 | 一级免费特黄视频 | 高颜值美女啪啪 | 亚洲成人午夜精品 | 亚洲精品久久久久久下一站 | 巨根插入|