0

首先对不起我的英语。

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

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

-- 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或类似的东西。我不知道我该怎么做。

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

4

2 回答 2

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
于 2013-05-17T08:52:01.373 回答
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
于 2013-05-16T11:43:25.623 回答