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 ' , NULL , NULL , NULL
/**/ /*
当 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
@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 ' , NULL , NULL , NULL
/**/ /*
当 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