在我們的日常工作中,與數據庫打交道的機會(huì )越來(lái)越多。這一篇文章我整理一下常見(jiàn)的SQL Server導入導出數據的幾個(gè)工具
這是一個(gè)可視化的工具,我放在首位,是由于它可以極大靈活地滿(mǎn)足導入導出功能,而且是所見(jiàn)即所得的,易于使用。
啟動(dòng)數據導入導出向導的方式有好多種,我自己習慣直接通過(guò)如下的命令啟動(dòng)(開(kāi)始=》運行)
dtswizard(顧名思義,它是一個(gè)wizard——向導,而且是與dts——data transfomation service有關(guān)的)
從下圖可以看出,這個(gè)工具支持多種不同類(lèi)型的數據源(以及數據目標),它其實(shí)不僅僅限于SQL Server服務(wù)器。
【注意】如果是64位,這里的提供程序中找不到Excel和Access(我知道很多朋友都想導出這兩種格式)
該向導還可以通過(guò)在SQL Server Management Studio(SSMS)中啟動(dòng)。如果數據源或者數據目標是SQL Server的話(huà),這是更加方便一些的。
【注意】通過(guò)這樣的方式啟動(dòng)的向導,卻又可以看到Excel和Access(很神奇吧,

值得一提的是,這個(gè)導入導出向導還有一個(gè)好處,就是將我們經(jīng)常需要導入導出的操作保存起來(lái),如下圖所示
這里有一個(gè)所謂的SSIS Package,是什么意思呢?SSIS指的是SQL Server Integration Service,它是微軟SQL Server BI平臺的一個(gè)重要組件,用來(lái)設計和管理ETL解決方案。
這個(gè)SSIS Package是一個(gè)擴展名為dtsx的特殊文件包,它可以通過(guò)一個(gè)所謂的Business Intelligence Developement Studio(BI Studio)打開(kāi)查看,并且還可以進(jìn)一步地編輯
【備注】SSIS的討論已經(jīng)超出了本篇文章的范圍。如有興趣,請搜索我其他的文章。
如果你要實(shí)現簡(jiǎn)單的數據導入導出,并且希望用腳本命令的方式,而不是圖形界面來(lái)實(shí)現。那么可以考慮SQL Server提供的BCP實(shí)用工具。
上圖演示了如何將一個(gè)表導出為Excel文件,但如果想要根據一個(gè)查詢(xún)導出的話(huà),則可以按照下面這樣的語(yǔ)法
使用BCP也可以進(jìn)行數據,只要將out改成In即可。
【注意】使用bcp導出數據最大一個(gè)問(wèn)題就是沒(méi)有標題行
如果想在T-SQL中直接導入Excel文件的數據,或者TXT文件的數據,則可以了解一下如下兩個(gè)特殊的T-SQL語(yǔ)法
BulkInsert的語(yǔ)法大致如下
OpenRowSet的語(yǔ)法大致如下
【備注】關(guān)于這兩個(gè)語(yǔ)句的詳細用法,請參考SQL Server自帶的聯(lián)機叢書(shū)。
如果想要導出導入XML格式的數據,則可以了解一下FORXML和OPENXML語(yǔ)法(它們是T-SQL語(yǔ)法,所以也可以很靈活地嵌入在我們的存儲過(guò)程中)
USE NorthwindGOSELECT * FROM Orders FOR XML RAW('OrderItem'), ELEMENTS XSINIL, ROOT('Orders')
上面的語(yǔ)法,可以將查詢(xún)用XML格式返回,如下圖所示
【備注】FOR XML是SELECT的一個(gè)子句,有關(guān)更多用法,請參考SQL Server自帶的聯(lián)機叢書(shū)
【備注】導出為XML格式的目的是為了更好地在不同應用程序之間共享。
反過(guò)來(lái),如果我們得到了一段XML數據,想將其導入到SQL Server中某個(gè)表中??梢钥紤]用OPENXML的語(yǔ)法。它的作用就是將XML還原為行集數據,然后就可以插入到我們的目的表中去了。
DECLARE @x XMLDECLARE @docHandle intSET @x=N'<Orders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <OrderItem> <OrderID>10248</OrderID> <CustomerID>VINET</CustomerID> <EmployeeID>3</EmployeeID> <OrderDate>1996-07-04T00:00:00</OrderDate> <RequiredDate>1996-08-01T00:00:00</RequiredDate> <ShippedDate>1996-07-16T00:00:00</ShippedDate> <ShipVia>3</ShipVia> <Freight>32.3800</Freight> <ShipName>Vins et alcools Chevalier</ShipName> <ShipAddress>59 rue de lAbbaye</ShipAddress> <ShipCity>Reims</ShipCity> <ShipRegion xsi:nil="true" /> <ShipPostalCode>51100</ShipPostalCode> <ShipCountry>France</ShipCountry> </OrderItem> <OrderItem> <OrderID>10249</OrderID> <CustomerID>TOMSP</CustomerID> <EmployeeID>6</EmployeeID> <OrderDate>1996-07-05T00:00:00</OrderDate> <RequiredDate>1996-08-16T00:00:00</RequiredDate> <ShippedDate>1996-07-10T00:00:00</ShippedDate> <ShipVia>1</ShipVia> <Freight>11.6100</Freight> <ShipName>Toms Spezialit?ten</ShipName> <ShipAddress>Luisenstr. 48</ShipAddress> <ShipCity>Münster</ShipCity> <ShipRegion xsi:nil="true" /> <ShipPostalCode>44087</ShipPostalCode> <ShipCountry>Germany</ShipCountry> </OrderItem></Orders>' --第一步,做準備EXEC SP_XML_PREPAREDOCUMENT @docHandle OUTPUT,@x--第二步,openxmlINSERT Orders SELECT * FROM OPENXML(@docHandle,N'/Orders/OrderItem',2) WITH Orders--第三步,銷(xiāo)毀EXEC sp_xml_removedocument @docHandle
【備注】OPENXML還有其他更加復雜的用法,請參考SQL Server自帶的聯(lián)機叢書(shū)
最后介紹一種更加簡(jiǎn)單的方法,如果經(jīng)常需要在Excel中進(jìn)行數據庫查詢(xún),并且據此做一些進(jìn)一步的分析。最好的方法是在Excel中直接去導出數據,或者建立查詢(xún)
這個(gè)做法的好處,是可以在現有Excel中,任何位置放置你需要的數據,而且需要注意的是,這些數據是鏈接到數據庫的,也就是說(shuō),如果數據庫的數據發(fā)生了更新,則只要刷新一下就可以了。
聯(lián)系客服