--创建存储过程 SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO Create PROCEDURE u_FH_SK AS Declare @err1 int SET @err1 = 0 SET NOCOUNT ON --设置事务隔离级别 --SET TRANSACTION ISOLATION LEVEL SERIALIZABLE --OLE/DB provider 不支持隔离层 Begin Tran --开始事务 --SET XACT_ABORT ON -- if (select count(*) from FH_SK2)=0 begin --把数据从Excel表导入到网站位表中 insert into FH_SK2 SELECT * FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="c:\test.xls";Extended properties=Excel 8.0')...[sheet1$] end COMMIT TRAN SET NOCOUNT OFF GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO --执行SQL EXECUTE u_FH_SK --查询导入的数据 select * from FH_SK2
ps:FH_SK2是SQL中的数据表,test.xls位于c盘下,sheet1$是默认的第一个tab页(值得注意的是数据库表和Excel表字段个数和类型要完全一致)
如果Excel字段非常多,涉及到行列转换问题,如下:
如图1所示的一个Word表格为例,向大家介绍具体的转置方法。
图1
1. 首先要在Word中右击表格左上角的十字标全选整个表格,然后执行右键菜单中的“复制”命令
2. 接下来打开Excel,在任意单元格处点击鼠标右键,选择“选择性粘贴→文本”命令,将Word表格粘贴到Excel中。如图2所示
图2
3. 右击并复制图2中这些带有数据的单元格(记住,此步不可缺少,至关重要!)
4. 然后切换到另一空白工作表中,右击并执行“选择性粘贴”命令。最后在弹出的如图3所示对话框中勾选“转置”复选框后点击确定即可
图3
5. 此时,您便会发现Excel表格中的行列已经按照我们的要求互换了,而且各个单元格的数据也分毫不差,这时再将转置好的表格拷贝回Word就行了。如图4所示就是已经转换好的Word表格,怎么样?效果不错吧。
二、执行存储过程
在执行存储过程中,可能会遇到如下错误提示:服务器×××上的MSDTC不可用
解决办法如下:
MSDTC(分布式交易协调器),协调跨多个数据库、消息队列、文件系统等资源管理器的事务。该服务的进程名为Msdtc.exe,该进程调用系统Microsoft Personal Web Server和Microsoft SQL Server。该服务用于管理多个服务器 .
位置:控制面板--管理工具--服务--Distributed Transaction Coordinator
依存关系:Remote Procedure Call(RPC)和Security Accounts Manager
建议:一般家用计算机涉及不到,除非你启用Message Queuing服务,可以停止。
位置:控制面板--管理工具--服务--Distributed Transaction Coordinator
依存关系:Remote Procedure Call(RPC)和Security Accounts Manager
建议:一般家用计算机涉及不到,除非你启用Message Queuing服务,可以停止。
解决办法: 1. 在windows控制面版-->管理工具-->服务-->Distributed Transaction Coordinator-->属性-->启动
2.在CMD下运行"net start msdtc"开启服务后正常。
注:如果在第1步Distributed Transaction Coordinator 无法启动,则是因为丢失了日志文件,重新创建日志文件,再启动就行了。重新创建 MSDTC 日志,并重新启动服务的步骤如下:
(1) 单击"开始",单击"运行",输入 cmd 后按"确定"。
(2) 输入:msdtc -resetlog (注意运行此命令时,不要执行挂起的事务)
(3) 最后输入:net start msdtc 回车,搞定!