Как добавить связанный сервер с SQL Server 2012 на SQL Server 2014 - PullRequest
0 голосов
/ 01 марта 2020

Я использую эту хранимую процедуру для создания связанного сервера с SQL Server 2012 до SQL Server 2014, и после его создания я могу получить нужную информацию о таблице с помощью команды Select и даже Insert запись в таблицу, но при срабатывании триггера я получаю следующую ошибку в таблице в SQL Server 2012:

Источник ошибки:. Net SqlClient Data Provider. Сообщение об ошибке: не удалось выполнить операцию, поскольку поставщику OLE DB «SQLNCLI11» для связанного сервера «dbsrv01 \ mssql2014» не удалось начать распределенную транзакцию.

Поставщик OLE DB «SQLNCLI11» для связанного сервера «dbsrv01 \» mssql2014 "возвращено сообщение" Менеджер транзакций отключил поддержку удаленных / сетевых транзакций. ".

Исправьте ошибки и повторите попытку или нажмите ES C, чтобы отменить изменения.

Хранимая процедура для создания связанного сервера:

EXEC master.dbo.sp_addlinkedserver 
            @server = N'dbsrv01\mssql2014', 
            @srvproduct=N'dbsrv01\mssql2014', 
            @provider=N'SQLNCLI', 
            @datasrc=N'dbsrv01\mssql2014', 
            @catalog=N'SgpPlus'

 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin 
                @rmtsrvname=N'dbsrv01\mssql2014',
                @useself=N'False',
                @locallogin=NULL,
                @rmtuser=N'salmanian', @rmtpassword='########'
GO

EXEC master.dbo.sp_serveroption 
            @server = N'dbsrv01\mssql2014', 
            @optname = N'collation compatible', @optvalue = N'false'
GO

EXEC master.dbo.sp_serveroption 
            @server = N'dbsrv01\mssql2014', 
            @optname = N'data access', @optvalue = N'true'
GO

EXEC master.dbo.sp_serveroption 
            @server = N'dbsrv01\mssql2014', 
            @optname = N'dist', @optvalue = N'false'
GO

EXEC master.dbo.sp_serveroption 
            @server = N'dbsrv01\mssql2014', 
            @optname = N'pub', @optvalue = N'false'
GO

EXEC master.dbo.sp_serveroption 
            @server = N'dbsrv01\mssql2014', 
            @optname = N'rpc', @optvalue = N'false'
GO

EXEC master.dbo.sp_serveroption 
            @server = N'dbsrv01\mssql2014', 
            @optname = N'rpc out', @optvalue = N'false'
GO

EXEC master.dbo.sp_serveroption 
            @server = N'dbsrv01\mssql2014', 
            @optname = N'sub', @optvalue = N'false'
GO

EXEC master.dbo.sp_serveroption 
            @server = N'dbsrv01\mssql2014', 
            @optname = N'connect timeout', @optvalue = N'0'
GO

EXEC master.dbo.sp_serveroption  
            @server = N'dbsrv01\mssql2014', 
            @optname = N'collation name', @optvalue = null
GO

EXEC master.dbo.sp_serveroption 
            @server = N'dbsrv01\mssql2014', 
            @optname = N'lazy schema validation', @optvalue = N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'dbsrv01\mssql2014', @optname=N'query timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'dbsrv01\mssql2014', @optname=N'use remote collation', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'dbsrv01\mssql2014', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

Триггер, написанный на таблице в SQL Server 2012:

ALTER TRIGGER [dbo].[trg_Announcements]
ON [dbo].[Tbl_Announcements]
AFTER INSERT, UPDATE
AS
    IF EXISTS (SELECT * FROM Inserted WHERE Inserted.xPublish = 1) AND 
       (EXISTS (SELECT * FROM Deleted WHERE Deleted.xPublish = 0) OR 
        NOT EXISTS(SELECT * FROM Deleted))
    BEGIN
        INSERT INTO [dbsrv01\mssql2014].SgpPlus.dbo.AppNotification 
                                       (FK_Template, FK_AppNotificationStatus,
                                        ObjectId, Title, Description,
                                        CreateDate) 
            SELECT 
                1, 1, 
                Inserted.xId, Inserted.xTitle, Inserted.xSummary, GETDATE()
            FROM 
                Inserted;
END;

В целом, я хотел бы добавить любую запись в эта таблица для записи в таблице SQL Server 2014.

...