呵呵,搞定了。
过程是这样的。 首先要在库中建立一个表,这个表要和excel的字段名对应。 我们在操作的时候是不用建立表的,但是在写存储过程的时候需要建立表,这点是比较麻烦。 然后写存储过程,4楼的牛人已经写的很清楚了,我这里再写一遍哈哈。 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数据库导入/导出表名 @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''' --将数据存放到临时表(一) SET @strSql = 'SELECT ' + @strExcelFiled + ' INTO ##Temp FROM OpenDataSource('+ @strExcelPath +')...'+ @strExcelSheetName +'$ ' +@strWhere --PRINT(@strSql) EXEC(@strSql) --将数据从临时表导入到sql数据库表(二,分两步可以做更多的处理) 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的文件,这里是固定的,真正用时需要修改相关参数 --EXEC master..xp_cmdshell 'bcp "SELECT * FROM wy_福州分公司.dbo.TExcelOutIn" queryout C:\test.xls -c -S"(local)" -U"sa" -P"123"' END GO 下一步是调用。 SET ANSI_WARNINGS ON--返回警告 GO SET ANSI_NULLS ON-- 指定在对空值使用等于 (=) 和不等于 ( <>) 比较运算符时,这些运算符的 SQL-92 遵从行为。 GO --将Excel数据导入到sql数据库 --版权 : 启程 letwego.cn --调用实例 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数据库导入表名 @strSqlFiled = 'sid,sno,sname'--Sql表的字段 |
|