Я использую эту хранимую процедуру для создания связанного сервера с 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.