当触发器无法在远程服务器中写入时,请写入本地服务器

时间:2013-05-16 11:23:43

标签: sql-server tsql triggers insert

首先抱歉我的英语。

我在特定表中收到更新时有一台服务器,我也希望写入远程服务器,但如果远程服务器不可用,我希望触发器写入另一个临时表中的本地服务器。

写入远程服务器的示例代码:

-- REMOTO is remote server
CREATE TRIGGER insertin
ON mangas
AFTER INSERT 
AS
    BEGIN
    DECLARE @serie varchar(max), @capitulo int 

    SELECT @serie = serie ,@capitulo = capitulo
    FROM inserted

    INSERT INTO [REMOTO].[Gest].[dbo].[MARCA] (Codigo, Descripcion)
    VALUES (@capitulo, @serie)
END

例如,我需要像TRY...CATCH或类似的东西。我不知道怎么办。

感谢您的回答,并再次为我的英语抱歉。

2 个答案:

答案 0 :(得分:0)

如果使用SQL Server 2005或更高版本,则可以在INSERT语句中放置一个TRY ... CATCH块。请参阅MSDN:http://msdn.microsoft.com/en-US/library/ms175976(v=sql.90).aspx

BEGIN TRY

    INSERT INTO [REMOTO].[Gest].[dbo].[MARCA]
        (Codigo, Descripcion)
         VALUES
           (   @capitulo, @serie ) 

END TRY
BEGIN CATCH
    INSERT INTO [dbo].[MyTemporaryTable]
        (Codigo, Descripcion)
         VALUES
           (   @capitulo, @serie ) 
END CATCH

答案 1 :(得分:0)

我使用此代码并且运行良好。 如果有人有更好的解决方案,请发帖,我现在正在学习t-sql。 任何建议都很顺利

begin 


declare
@serie varchar(max),
@capitulo int,
@maxMarca int


select @serie = serie
from inserted
select @maxMarca =max(Codigo) from [REMOTO].[Gest].[dbo].[MARCA]      

set @maxMarca = @maxMarca+1
commit -- save transaction insert which generates this trigger work.
begin TRANSACTION
    BEGIN TRY   
        INSERT INTO [REMOTO].[Gest].[dbo].[MARCA]  (Codigo, Descripcion)   VALUES   ( @maxMarca, @serie)             
        commit transaction --save transaction and finish, if remote server work
    END TRY    
    BEGIN CATCH                

    IF @@trancount > 0
        begin           
        rollback transaction   --remote transaction is  go back
            INSERT INTO [mangas].[dbo].[mangasTemp]  VALUES  (@maxMarca, @serie)        
        commit transaction   -- save transaction in local temporal table.
        end
    END CATCH


   end

       go