Более 1 триггера (вставка, обновление) в таблице не работает - почему? Является ли это возможным? - PullRequest
0 голосов
/ 03 мая 2018

Мой вопрос

Могу ли я иметь 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...