日期:2014-05-17  浏览次数:20557 次

sql导入excel表格的问题 求高手解答
本帖最后由 zearling1 于 2013-01-29 17:50:40 编辑
alter 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(exists(select name from tempdb..sysobjects where name like'##Temp'))
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


这个是一个网上找到一个导入EXCEL的通用方法

但是我在调用此方法时


EXEC spExcelOutIn 
@strOptions = 'In',
@strWhere = null,--导入/导出查询条件(包括Where 关键字)
@strExcelPath = 'd:/sharefolder/CN20130110181706-testing.xls',--Excel的绝对路径
@strExcelSheetName = 'Sheet1',--Excel里要导入的工作表名称如Sheet2,注意,后面不要加上$
@strExcelFiled ='Account No./ Deal No,Customer Chinese Name,Customer English Name,Currency,Balance,Bizcode,Email,Normal,Balance Date,Relationship No.,Master No.,Account Opening Branch Chinese Name,Branch Code,ARM Code,Product Code,Product Description,Segment Code,EMT,Account Status,Account Open Date',--Excel工作表的字段

@strSqlTableName = 'accountinfo',--Sql数据库导入表名
@strSqlFiled = 'accountno,chinesename,englishname,currency,balance,bizcode,isemail,isnormal,balancedate,relationshipno,masterno,accountopenbranch,branchcode,armcode,productcode,productdesc,segmentcode,emt,accountstatus,accountOpenDate'--Sql表的字段


之后就报错了

报的错为
消息 208,级别 16,状态 0,第 1 行
对象名 '##Temp' 无效。
消息 3701,级别 11,状态 5,过程 spExcelOutIn,第 29 行
无法对 表 '##Temp' 执行 删除,因为它不存在,或者您没有所需的权限。

求解决方法 或提供一个其他的通用方法 谢谢 
excel sql 数据库

------解决方案--------