The operation could not be performed because OLE DB provider "MSOLEDBSQL" for linked server "ServerB" was unable to begin a distributed transaction
0
votes
1
answer
132
views
A Tale As Old As Time...
-
I have a Linked Server setup to a 3rd party database which I have no ownership or access to otherwise. Lets call it
But no dice, same error:
I understand that the query wants to promote to a distributed transaction for the above scenario since a Linked Server is involved (I assume enforcing
ServerB
. I have a stored procedure (SomeStoredProcedure
) that selects from Linked Server ServerB
. If I explicitly set the isolation level to SERIALIZABLE
and then try to insert the results of SomeStoredProcedure
into a local temp table, I get the following error:
> OLE DB provider "MSOLEDBSQL" for linked server "ServerB" returned message "The parameter is incorrect.".
>
> Msg 7399, Level 16, State 1, Line 1
>
> The OLE DB provider "MSOLEDBSQL" for linked server "ServerB" reported an error. One or more arguments were reported invalid by the provider.
>
> Msg 7391, Level 16, State 2, Line 1
>
> The operation could not be performed because OLE DB provider "MSOLEDBSQL" for linked server "ServerB" was unable to begin a distributed transaction.
If I just execute the procedure directly (without inserting the results into a local temp table) it works. If I don't use the SERIALIZABLE
isolation level, it also works. (Other explicit isolation levels work as well.)
I have tried disabling Enable Promotion of Distributed Transactions for RPC
as mentioned in other answers:


SERIALIZABLE
isolation is more involved across a remote server). But is it possible to prevent it from promoting to a distributed transaction under these circumstances?
The same issue is reproducible using sp_executesql
to select from the Linked Server as well. Repro code for example:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
DROP TABLE IF EXISTS #LocalTempTable;
CREATE TABLE #LocalTempTable (ID INT);
INSERT INTO #LocalTempTable (ID)
EXEC sp_executesql N'SELECT ID FROM ServerB.DatabaseName.SchemaName.SomeTable;';
*Reminder: I don't own this 3rd party server, and can't change any settings on it such as actually enabling the MSDTC.
Asked by J.D.
(40893 rep)
Jun 27, 2025, 06:06 PM
Last activity: Jun 28, 2025, 01:11 PM
Last activity: Jun 28, 2025, 01:11 PM