我有兩個不同的SQL 2008服務器,我沒有權限在其中任何一個創建鏈接服務器。 我創建了一個觸發器上server1.table1插入相同的記錄使用OPENROWSET觸發每個插入的行插入到遠程表
我創建了一個存儲過程中插入此記錄的遠程服務器server2.table1,和我沒有問題,當我執行存儲過程。它將記錄插入遠程服務器。
問題是當我從觸發器調用存儲過程時,我收到一條錯誤消息。
誰能幫助我,請解決這個問題
存儲過程:
USE [DB1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter PROCEDURE [dbo].[InsertIntoRemoteTable]
@Description nvarchar(50)
AS
insert into
OPENROWSET(
'SQLNCLI', 'Server=Server2;UID=MySRV2user;PWD=MySRV2Password',
'SELECT Description FROM [RemoteDB].[dbo].[Table_1]')
SELECT @Description
觸發:
ALTER TRIGGER [dbo].[InsertTable1]
ON [DB1].[dbo].[Table_1]
for insert
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Desc nvarchar(50)
Select @Desc = i.Descr from INSERTED i;
EXEC InsertIntoRemoteTable @Desc
END
當我嘗試插入我得到了表的新描述值以下錯誤消息:
"No row was updated
the data in row 1 was not committed
Error source .Net SqlClient Data provider.
Error Message: the operation could not be performed because OLE DB
provider "SQLNCLI10" for linked server "(null)" returned message "The partner transaction manager has disabled its support for remote/network transaction.".
correct the errors entry or press ESC to cancel the change(s).
任何人都可以幫助請在此 謝謝
您的觸發器有重大缺陷。它假定只會插入一行。您需要編寫觸發器來處理數據集。在這種情況下,最可能的含義是修改過程InsertIntoRemoteTable以接收表值參數而不是標量值。至於錯誤信息...你嘗試研究它嗎?搜索錯誤消息提供了成千上萬的解釋該消息以及如何解決該消息的鏈接。 –
我真的沒有仔細看看你的程序。那裏的參數是什麼?你傳入它,然後在最後選擇它。另一個有趣的部分是,您只需將Table_1中的所有行插入到遠程表中即可。這將產生重複出wazoo,因爲它只是反覆插入相同的行。我認爲你需要分析你的過程並找出你想要在這裏做什麼。 –
該參數是新插入的字段值,所以當新記錄插入到table1中時,觸發器調用該過程併發送字段值,將這些值插入到遠程表中 – Mohamed