|
呵呵,搞定了。
過程是這樣的。 首先要在庫中建立一個表,這個表要和excel的字段名對應。 我們在操作的時候是不用建立表的,但是在寫存儲過程的時候需要建立表,這點是比較麻煩。 然后寫存儲過程,4樓的牛人已經(jīng)寫的很清楚了,我這里再寫一遍哈哈。 CREATE PROCEDURE spExcelOutIn @strOptions varchar(200) = NULL, @strWhere nvarchar(4000) = NULL,--導入/導出查詢條件(包括Where 關鍵字) @strExcelPath nvarchar(1000) = NULL,--Excel的絕對路徑 @strExcelSheetName nvarchar(50) = NULL,--Excel里要導入的工作表名稱 如Sheet2,注意,后面不要加上$ @strExcelFiled nvarchar(1000) = NULL,--Excel工作表的字段 @strSqlTableName nvarchar(100) = NULL,--Sql數(shù)據(jù)庫導入/導出表名 @strSqlFiled nvarchar(1000) = NULL--Sql表的字段 AS DECLARE @strSql nvarchar(4000) IF OBJECT_ID('tempdb..##Temp') IS NOT NULL DROP TABLE ##Temp /* 導入 */ IF @strOptions='In' AND NOT @strExcelPath IS NULL BEGIN SET @strExcelPath = '''Microsoft.Jet.OLEDB.4.0'',''Data Source="' + @strExcelPath + '";User ID=Admin;Password=;Extended properties=Excel 5.0''' --將數(shù)據(jù)存放到臨時表(一) SET @strSql = 'SELECT ' + @strExcelFiled + ' INTO ##Temp FROM OpenDataSource('+ @strExcelPath +')...'+ @strExcelSheetName +'$ ' +@strWhere --PRINT(@strSql) EXEC(@strSql) --將數(shù)據(jù)從臨時表導入到sql數(shù)據(jù)庫表(二,分兩步可以做更多的處理) SET @strSql = 'INSERT INTO ' + @strSqlTableName + '('+ @strSqlFiled +') SELECT * FROM ##Temp' --PRINT(@strSql) EXEC(@strSql) --SELECT * FROM ##Temp DROP TABLE ##Temp END /* 導出 */ IF @strOptions='Out' AND NOT @strExcelPath IS NULL BEGIN SET @strExcelPath = '' --導成類似(不是真正的Excel,是文本格式)Excel的文件,這里是固定的,真正用時需要修改相關參數(shù) --EXEC master..xp_cmdshell 'bcp "SELECT * FROM wy_福州分公司.dbo.TExcelOutIn" queryout C:\test.xls -c -S"(local)" -U"sa" -P"123"' END GO 下一步是調(diào)用。 SET ANSI_WARNINGS ON--返回警告 GO SET ANSI_NULLS ON-- 指定在對空值使用等于 (=) 和不等于 ( <>) 比較運算符時,這些運算符的 SQL-92 遵從行為。 GO --將Excel數(shù)據(jù)導入到sql數(shù)據(jù)庫 --版權 : 啟程 letwego.cn --調(diào)用實例 EXEC spExcelOutIn @strOptions = 'In', @strWhere = 'WHERE sid>0',--導入/導出查詢條件(包括Where 關鍵字),這里是excel表中的字段也是sql表中的字段。 @strExcelPath = 'd:\a.xls',--Excel的絕對路徑 @strExcelSheetName = 'Sheet1',--Excel里要導入的工作表名稱 如Sheet2,注意,后面不要加上$ @strExcelFiled = 'sid,sno,sname',--Excel工作表的字段 @strSqlTableName = 't_test',--Sql數(shù)據(jù)庫導入表名 @strSqlFiled = 'sid,sno,sname'--Sql表的字段 |
|
|
來自: 水底の小魚 > 《數(shù)據(jù)庫技術》