3

我是数据库新手,我对带有触发器或检查约束的表有疑问。我正在使用 SQL Server 管理工作室。

我有下表:

create table item(
    startprice        char(5)          not null,
    description       char(22)         not null,
    start_date        char(10)         not null,
    end_date          char(10)         not null,
    indicator         char(3)          not null

);

我想要做的是这个触发器/约束规则:indicator如果系统日期早于start_dateand end_date,将得到“否”,如果系统日期在 之后,将得到“是” start_date

4

2 回答 2

1

如果indicator仅通过插入进行评估,那么我建议将 sysdate 保存在新列created中并indicator作为计算列

ALTER TABLE item ADD created datetime not null default getdate()

ALTER TABLE item ADD indicator AS 
    case when created < start_date then 'no' else 'yes' end
    PERSISTED

触发器也是一个不错的选择:

CREATE TRIGGER item_indicator
ON item
FOR INSERT, UPDATE
AS
   update inserted set indicator 
     = case when getdate() < start_date then 'no' else 'yes' end
GO

创建新视图(如果您在created列中保留 sysdate):

 create view item2 as 
   select ...
     , case when created < start_date then 'no' else 'yes' end as indicator
   from item

如果您需要indicatorindicator.

如果每次更新都会计算该值,那么 trigger 似乎是最合适的。

这些示例均未在实际案例中进行测试:)

于 2013-05-19T23:28:41.260 回答
1

这很简单,您必须使用带有before insert选项的触发器 -

以下触发器很适合在 Oracle DB 中使用 -

CREATE OR REPLACE TRIGGER  item_insert_indicator 
BEFORE DELETE ON item 
For each row 
begin
if  :New.start_date > sysdate and :new.end_date > sysdate then 
   :New.indicator := 'no';
elsif :New.start_date < sysdate
   :New.indicator := 'yes';
end if;
end;

这仅供您参考。对于您的数据库,您可以相应地更改关键字。

于 2013-05-19T22:36:46.617 回答