Мой вопрос
Могу ли я иметь 2 триггера вставки, обновления для одной и той же таблицы, и они оба работают.
У меня есть 3 таблицы с одинаковой схемой TestTable, TestTable2, TestTable3
Для удобства, схема выглядит следующим образом. У меня есть команды create-schema под кодом триггера:
PK - int (это первичный ключ)
Имя- Вчарчар (10)
TheValue - int
Они пытаются синхронизировать вставленные и обновленные строки в TestTable с TestTable2 и TestTable3
Если я отключаю 1, запускаются другие, и наоборот.
Мой ВОПРОС> Могут ли оба триггера работать на столе
2 триггера и схема, определенные ниже:
USE [WQMetaData]
GO
/****** Object: Trigger [dbo].[TESTTABLETRIGGER] Script Date: 05/03/2018 10:59:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE TRIGGER [dbo].[TESTTABLETRIGGER]
ON [dbo].[testtable]
AFTER INSERT, update
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @thevalue int,@pk int, @existingPK int
set @existingPK = 0
select @thevalue= thevalue from inserted
select @pk = pk from inserted
select @existingPK = pk from WQMetaData.dbo.TESTTABLE2 where pk = @pk
if @existingPK <= 0
begin
Insert into WQMetaData.dbo.TESTTABLE2 (pk,name, thevalue)
select
inserted.pk,
inserted.name,
inserted.thevalue
from inserted
end
if @pk > 0
begin
update WQMetaData.dbo.TESTTABLE2 set thevalue = @thevalue where pk = @pk
end
END
GO
**2nd trigger**
USE [WQMetaData]
GO
/****** Object: Trigger [dbo].[TESTTABLETRIGGER2] Script Date: 05/03/2018 11:00:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE TRIGGER [dbo].[TESTTABLETRIGGER2]
ON [dbo].[testtable]
AFTER INSERT, update
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @thevalue int,@pk int, @existingPK int
set @existingPK = 0
select @thevalue= thevalue from inserted
select @pk = pk from inserted
select @existingPK = pk from WQMetaData.dbo.TESTTABLE2 where pk = @pk
if @existingPK <= 0
begin
Insert into WQMetaData.dbo.TESTTABLE3 (pk,name, thevalue)
select
inserted.pk,
inserted.name,
inserted.thevalue
from inserted
end
if @pk > 0
begin
update WQMetaData.dbo.TESTTABLE3 set thevalue = @thevalue where pk = @pk
end
END
GO
USE [WQMetaData]
GO
/****** Object: Table [dbo].[testtable] Script Date: 05/03/2018 11:33:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[testtable](
[PK] [int] NOT NULL,
[NAME] [varchar](12) NOT NULL,
[TheValue] [int] NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO