今天,,那個(gè)新來(lái)的MM又來(lái)問(wèn)我如何使用T-SQL語(yǔ)句進(jìn)行 SQL Server表與Excel,、Access數(shù)據(jù)互導(dǎo)的問(wèn)題了,看來(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)常訪問(wèn)的 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》