0

我有一个位于 32 位 sql 服务器上的 Helper DB,并且我添加了一个 64 位的链接服务器,

执行 Excel 导入操作,因为 Jet.oledb 驱动程序在 64 位 sql server 机器上不受支持。

一切正常,但我必须维护链接服务器数据库上发生的插入、更新、删除事务,

我已经在客户端机器和服务器机器上配置了 DTC 服务,

在 sp 顶部添加了 Block 用于存储过程启动时的事务,例如,

BEGIN TRY SET XACT_ABORT ON BEGIN TRANSACTION
BEGIN TRY

设置 XACT_ABORT 开

开始交易

- 代码

- 代码

结束尝试

开始捕捉

IF @@TRANCOUNT<>0 回滚交易

--// 引发错误以登录网站。

声明@ErrorMessage NVARCHAR(4000);

声明@ErrorSeverity INT;

声明@ErrorState INT;

选择

@ErrorMessage = ERROR_MESSAGE(),

@ErrorSeverity = ERROR_SEVERITY(),

@ErrorState = ERROR_STATE();

RAISERROR (@ErrorMessage, -- 消息文本。

   @ErrorSeverity, -- Severity.  

   @ErrorState -- State.  

   );  

但它抛出了一个错误的说法,

无法执行请求的操作,因为链接服务器“(null)”的 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”不支持所需的事务接口。

它在我用来从 Excel 表中读取数据的 Openrowset 函数上引发错误

IE,

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 5.0;HDR=Yes; IMEX=1;Database=C:\test.xls','SELECT EmployeeID FROM [Sheet$]
where EmployeeID is not null ')

我真的被困住了,因为找不到任何解决方案而变得疯狂,

在此先感谢您的帮助,

4

2 回答 2

1

我有一个类似的问题,从 CSV 导入。通过命名我的事务(例如 BEGIN TRAN mytran)并检查 @@ROWCOUNT 而不是 @@TRANCOUNT 来解决它。

我知道自从 OP 询问以来已经有很长时间了,但也许它可以帮助有人在谷歌上搜索这个问题。:)

于 2011-08-02T12:09:26.670 回答
0

如果您在光标中打开 Excel 文件,但在 Begin Trans. ?

于 2010-01-14T18:53:20.607 回答