今天,那個(gè)新來(lái)的MM又來(lái)問我如何使用T-SQL語(yǔ)句進(jìn)行 SQL Server表與Excel、Access數(shù)據(jù)互導(dǎo)的問題了,看來(lái)她是吃定我了,,,什么時(shí)候是個(gè)盡頭啊,,,,,555555555,,,,, 不過(guò)也好,正好寫些東西,免得以后忘記了,或許對(duì)大家還有些幫助,,,,呵呵,,,只能自我安慰一下了。。 1、SQL Server導(dǎo)出為Excel: 要用T-SQL語(yǔ)句直接導(dǎo)出至Excel工作薄,就必須借用SQL Server管理器的一個(gè)擴(kuò)展存儲(chǔ)過(guò)程:“xp_cmdshell”,此過(guò)程的作用為“以操作系統(tǒng)命令行解釋器的方式執(zhí)行給定的命令字符串,并以文本行方式返回任何輸出?!毕旅鏋槎x示例: EXEC master..xp_cmdshell 'bcp 庫(kù)名.dbo.表名out c:\Book3.xls -c -q -S"servername" -U"sa" -P""' 參數(shù):S 是SQL服務(wù)器名;U是用戶名;P是密碼,沒有就空著 說(shuō)明:其實(shí)用這個(gè)過(guò)程導(dǎo)出的格式實(shí)質(zhì)上就是文本格式的,不信的話在導(dǎo)出的Excel表中改動(dòng)一下再保存看看。 實(shí)際例子與說(shuō)明如下: A,將表整個(gè)導(dǎo)出至Excel: 注: ××northwind.dbo.orders,為數(shù)據(jù)庫(kù)名+擁有者+表名 ××在bcp后面加了一個(gè)查詢語(yǔ)句,并用雙引號(hào)括起來(lái) 2、Excel導(dǎo)入SQL Server表: 在SQL Server中,有定義一個(gè)OpenDateSource函數(shù),用于引用那些不經(jīng)常訪問的 OLE DB 數(shù)據(jù)源,而我們的數(shù)據(jù)互導(dǎo)操作,就是建立在這個(gè)函數(shù)之上。 首先看一個(gè)T-SQL幫助中的示例,描述如下: 如果你直接引用這個(gè)示例進(jìn)行查詢,那么肯定是通不過(guò)的。 關(guān)鍵在于語(yǔ)句中的兩個(gè)地方需要修改,1為Data Source處,雙引號(hào)內(nèi)為Excel表格的實(shí)際存放位置,要修改為你想查詢的Excel表實(shí)際完整路徑;2為最后的...xactions,其實(shí)這里代表的是要進(jìn)行的某些動(dòng)作,下面會(huì)講,這里修改成用中括號(hào)包圍的Excel表中工作表名字(加上一個(gè)$)就可以了,如[Sheet1$]。當(dāng)然,還可以將Excel 5.0改為Excel 9.0,因?yàn)?.0是以前的老版本了。 實(shí)例說(shuō)明如下: A、插入Excel中的資料到現(xiàn)存的sql數(shù)據(jù)庫(kù)表中(假設(shè)C盤有excel表book1.xls,book1.xls中有個(gè)工作表sheet1,sheet1中有兩列id和Name;而同時(shí)sql數(shù)據(jù)庫(kù)中也有一個(gè)表A): 注意: 不要用select * ,否則列的次序會(huì)亂,資料內(nèi)容也會(huì)亂,無(wú)法插入成功,慎重!!易錯(cuò)。 B、插入excel表中資料到sql數(shù)據(jù)庫(kù)并新建一個(gè)sql表(excel的假設(shè)同上): 在select 列中最好用convert進(jìn)行顯示類型轉(zhuǎn)換,否則資料類型可能會(huì)不如預(yù)期。 3,補(bǔ)充:以上是 SQL Server與Excel的數(shù)據(jù)互導(dǎo),而Access和Excel的基本一樣,只是要去掉Extended properties聲明,一樣easy。 下面補(bǔ)充一個(gè)Delphi的例子:(導(dǎo)出為excel表): |
|
來(lái)自: 悟靜 > 《.net和asp.net》