分享

向 SQLServer2000动态导入Excel的存储过程如何实现

 水底の小鱼 2009-05-06
呵呵,搞定了。
过程是这样的。
首先要在库中建立一个表,这个表要和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表的字段

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多