32 ビット SQL サーバー上にヘルパー DB があり、64 ビットのリンク サーバーを追加しました。
Jet.oledb ドライバーは 64 ビットの SQL サーバー コンピューターではサポートされていないため、Excel のインポート操作を実行することはできません。
すべて正常に動作していますが、リンク サーバー データベースで発生する挿入、更新、削除のトランザクションを維持する必要があります。
クライアント マシンとサーバー マシンで DTC サービスを構成しました。
ストアド プロシージャの開始時にトランザクション用に sp の上にブロックを追加しました。
BEGIN TRY SET XACT_ABORT ON BEGIN TRANSACTION
BEGIN TRY
XACT_ABORT をオンに設定
取引開始
- コード
- コード
エンドトライ
キャッチ開始
IF @@TRANCOUNT<>0 ロールバック トランザクション
--// Web サイトにログインするためのエラーを発生させます。
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @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関数でエラーがスローされます
つまり、
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 ')
解決策が見つからないので、私は本当に行き詰まり、夢中になっています。
助けてくれてありがとう、