【发布时间】:2015-01-28 09:15:25
【问题描述】:
我有“要求”的精髓。如果用户在这种情况下更改了“描述”字段,它应该自动更改“稳定性”字段的值(下拉列表)。也就是说,如果你不得不改变需求的描述,它就会变得不稳定。我写了一个触发器
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])
);
更新表格 更新发生在 Web 应用程序界面中
这是来自 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
【问题讨论】:
-
您使用哪种 RDBMS? Sql 服务器?
-
在 SQL Server 中,我无法重现您的情况。除了在您的触发器中,您正在更新整个表。
-
你的查询有大问题
update [Requirement] set Stability = 2这行会更新表中的所有数据而不仅仅是更新的行 -
如何更新没有更新整个表的表列?
-
你应该使用这个句子
update [Requirement] set Stability = 2 where id in (select id from inserted)(假设你的表有id字段)
标签: sql sql-server tsql database-trigger