2015-01-28 4 views
0

У меня есть сущность «Требования». Если пользователь изменил поле «Описание» в этом экземпляре, он должен автоматически изменить значение поля «Стабильность» (выпадающий список). То есть, если вам нужно было изменить описание требований, оно становится неустойчивым. Я написал спусковой крючокЕсли поле существенно изменилось, измените значение одного из его столбцов

CREATE TRIGGER [ChangeStabilityRequirement] 
ON [dbo].[Requirement] AFTER UPDATE 
AS 
BEGIN 
    if update([Definition]) 
    begin 
     update [Requirement] set Stability = 2 
     where RequirementId in (select RequirementId from inserted) 
    end 
end 

Но проблема в том, что триггер активируется при внесении изменений в таблицу. Необходимо ответить только на изменения в столбце «Определение».

МОЙ ТАБЛИЦА

CREATE TABLE [dbo].[Requirement] (
    [RequirementId]     INT   IDENTITY (1, 1) NOT NULL, 
    [Rationale]      NVARCHAR (MAX) NULL, 
    [CreatedOn]      DATE   CONSTRAINT [DF__Requireme__Creat__473C8FC7] DEFAULT (getdate()) NULL, 
    [CurentVersion]     NVARCHAR (MAX) NULL, 
    [State]       INT   NOT NULL, 
    [Priority]      INT   NOT NULL, 
    [Type]       INT   NOT NULL, 
    [Source_BusinessRuleId]   INT   NULL, 
    [Stability]      INT   NOT NULL, 
    [UserPart]      NVARCHAR (MAX) NULL, 
    [CreatedBy_UserId]    INT   NULL, 
    [Responsible_UserId]    INT   NULL, 
    [ImplementationVersion]   NVARCHAR (MAX) NULL, 
    [ResponsibleId]     INT   DEFAULT ((0)) NULL, 
    [SourceId]      INT   DEFAULT ((0)) NULL, 
    [InterfacePoint_InterfacePointId] INT   NULL, 
    [InterfacePointId]    INT   DEFAULT ((0)) NULL, 
    [CreatedById]      INT   DEFAULT ((0)) NULL, 
    [Definition]      NVARCHAR (MAX) DEFAULT ('') NOT NULL, 
    CONSTRAINT [PK_dbo.Requirement] PRIMARY KEY CLUSTERED ([RequirementId] ASC), 
    CONSTRAINT [FK_dbo.Requirement_dbo.User_CreatedById] FOREIGN KEY ([CreatedById]) REFERENCES [dbo].[User] ([UserId]), 
    CONSTRAINT [FK_dbo.Requirement_dbo.User_ResponsibleId] FOREIGN KEY ([ResponsibleId]) REFERENCES [dbo].[User] ([UserId]), 
    CONSTRAINT [FK_dbo.Requirement_dbo.BusinessRule_SourceId] FOREIGN KEY ([SourceId]) REFERENCES [dbo].[BusinessRule] ([BusinessRuleId]) 
); 

Обновление таблицы Обновление происходит в интерфейсе веб-приложения

Это запрос от SQL SERVER Профиль

exec [dbo].[Requirement_Update] 
@RequirementId=32, 
@Definition=N'Реализовать возможность выбора значения "Без пени" в поле "Тип начисления пени". Диалоговое окно АР-12', 
@Rationale=N'В соответствии с изменением бизнес-правила', 
@CreatedOn='2014-12-18 00:00:00', 
@CurentVersion=N'2.1', 
@ImplementationVersion=N'2.2', 
@State=0, 
@Priority=1, 
@Stability=1, 
@Type=0 
+0

Какие СУБД вы используете? Сервер Sql? –

+0

В SQL Server я не могу воспроизвести вашу ситуацию. Кроме того, в вашем триггере вы обновляете всю таблицу. –

+0

Я использую SQL SEVER. –

ответ

0

Хорошо, если вы необходимо обновить Требование только при обновлении определения, а затем изменить свой триггер как:

CREATE TRIGGER [ChangeStabilityRequirement] 
    ON [dbo].[Requirement] AFTER UPDATE 
    AS 
    BEGIN 
     if update([Definition]) AND NOT update([Rationale]) AND NOT update([CurentVersion]) 
     --AND NOT UPDATE(.....list here all possible columns that may be updated 
     begin 
      update [Requirement] set Stability = 2 
      where RequirementId in (select RequirementId from inserted) 
     end 
    end 
+0

Теперь «Стабильность» никогда не установлена ​​= 2 –

+0

Теперь вы должны решить, будет ли обновлять стабильность только тогда, когда определено определение или когда определено изменен с любым другим столбцом. Очевидно, что стабильность не изменяется, потому что у вас нет запроса на обновление, который обновляет только столбец определения. –

+0

, когда определение изменяется с любым другим столбцом :) –