zoukankan      html  css  js  c++  java
  • 一个存储过程实现将Excel数据导入数据库

    数据库:SQL Server2000
    CREATE PROCEDURE [dbo].[au_XLS2TMP]
    @sheet NVARCHAR(50)='UserList'
    AS
    DECLARE @STR VARCHAR(2000)
    /*
    sp_addlinkedserver--创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问
    @server='USER_LIST',--被访问的服务器别名
    @srvproduct='USER_LIST',--要添加为链接服务器的 OLE DB 数据源的产品名称
    @datasrc='d:\file\Users.xls'   --要访问的服务器
    */

    EXEC sp_addlinkedserver @server='USER_LIST'@srvproduct='USER_LIST'@provider='Microsoft.Jet.OLEDB.4.0'@datasrc='d:\file\Users.xls'@provstr='Excel 8.0;HDR=Yes;IMEX=1;'
    EXEC sp_addlinkedsrvlogin 'USER_LIST','false'NULLNULLNULL
    /*
    当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。 
    当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。
    编译错误(如语法错误)不受 SET XACT_ABORT 的影响。
    */

    SET XACT_ABORT ON
    /*
    BEGIN DISTRIBUTED TRAN:跟踪 MS DTC 实用工具中的分布式事务
    详细可参考:http://www.cnblogs.com/alanliu/archive/2007/12/25/1014259.html
    */

    BEGIN DISTRIBUTED TRAN

    SET @STR = 'INSERT INTO dbo.MEMBERS ' + 
        
    '(USERNAME,USERPASS,EMAIL) ' + 
        
    'SELECT ' + 
        
    'USERNAME,USERPASS,EMAIL ' + 
        
    'FROM OPENQUERY(USER_LIST,''SELECT * FROM [' + 
        
    @sheet + '$]'')'
    EXEC (@STR)

    IF @@ERROR > 0
        
    GOTO ChkRollBack

    ChkRollBack:
    IF @@ERROR > 0
        
    ROLLBACK TRAN
    ELSE
        
    COMMIT TRAN

    SET XACT_ABORT OFF

    EXEC sp_dropserver 'USER_LIST','droplogins'
    GO
  • 相关阅读:
    在VSCode中使用码云
    自定义博客样式
    bolb、bloburl、file、base64间的转换
    html2canvas的使用:vue中将div导出成图片
    vue-to-pdf的使用:vue中将div转换为pdf文件
    早期javac编译器优化
    HttpClient4.3 连接池参数配置及源码解读
    Java编译程序和运行过程详解
    JVM中的常量池详解
    MySQL索引背后的数据结构及原理
  • 原文地址:https://www.cnblogs.com/bluedy1229/p/1781612.html
Copyright © 2011-2022 走看看