简体   繁体   中英

Executing stored procedure via linked server through trigger

I have created a linked server on a SQL Server connecting to an Azure SQL datawarehouse.

EXEC master.dbo.sp_addlinkedserver @server = N'LinkedserverTest', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'AZserver.database.windows.net', @catalog=N'AEDW'

  /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LinkedserverTest', @useself=N'False', @locallogin=NULL, @rmtuser=N'SQLACcount', @rmtpassword='########'
GO        
   
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'collation compatible', @optvalue=N'false'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'data access', @optvalue=N'true'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'dist', @optvalue=N'false'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'pub', @optvalue=N'false'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'rpc', @optvalue=N'true'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'rpc out', @optvalue=N'true'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'sub', @optvalue=N'false'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'connect timeout', @optvalue=N'0'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'collation name', @optvalue=null
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'lazy schema validation', @optvalue=N'false'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'query timeout', @optvalue=N'0'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'use remote collation', @optvalue=N'true'
GO
    
EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

When I execute a stored procedure of SQL DW via SSMS as below, it is getting executed as expected.

EXEC Linkedservername,Databasename.dbo.spname

But when I try to have that stored procedure executed as a part of trigger definition

CREATE TRIGGER [TriggerTest]
ON [dbo].[TriggerTest]
AFTER INSERT  
AS
BEGIN
    EXEC LSName.databasenm.dbo.SPname
END

And when I try to insert a record into the table, I get the below error:

Msg 596, Level 21, State 1, Line 18
Cannot continue the execution because the session is in the kill state.

Msg 46710, Level 20, State 1, Line 19
Unsupported transaction manager request 0 encountered. SQL Server Parallel DataWarehousing TDS endpoint only supports local transaction request for 'begin/commit/rollback'.

So am I missing anything or it is not possible to trigger cross database stored procedures via trigger definitions

Like the error says, you can't enlist the remote proc execution in your trigger's transaction. So try

EXEC master.dbo.sp_serveroption @server=N'LinkedserverTest', 
                                @optname=N'remote proc transaction promotion', 
                                @optvalue=N'false'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM