首先抱歉我的英语。
我在特定表中收到更新时有一台服务器,我也希望写入远程服务器,但如果远程服务器不可用,我希望触发器写入另一个临时表中的本地服务器。
写入远程服务器的示例代码:
-- 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
或类似的东西。我不知道怎么办。
感谢您的回答,并再次为我的英语抱歉。
答案 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