我每周导入一次电子表格,其中充满了我们作为公司所做的所有培训,其中一些是强制性的,其中一些不是。我是否能够触发摆脱强制性培训。
delete from [import training]
where module not in ('Mandatory Training 1','Mandatory Training 2' etc...)
作为代码看起来像什么的示例,但是当我有正确的语法时它会作为触发器吗?
答案 0 :(得分:0)
为什么删除强制性培训?
相反,创建一个视图:
create view optional_training as
select t.*
from [import training] t
where t.module not in ('Mandatory Training 1','Mandatory Training 2' etc...);
然后,有人可以查询视图以获得可选的培训。他们可以查询基表以获得所有培训。
答案 1 :(得分:0)
是的,它会起作用,但首先考虑以下选项:
CHECK
约束。这将强制所有非有效值被整个插入/更新拒绝。WHERE
或视图。如果前面的选项不合适,那么您可以像Jeroen一样创建一个INSTEAD OF
触发器,它将使用有效值重写插入操作。您还需要考虑此字段的更新。
CREATE TRIGGER OnlyMandatoryTrainings ON [import training]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON
INSERT INTO [import training] (
module
-- All remaining columns
)
SELECT
module
-- All remaining columns
FROM
inserted AS I
WHERE
I.module IN ('valid value 1', 'valid value 2')
END
使用触发器来实现业务逻辑并不是一种好的做法,尽管偶尔可能会有一些例外。我会尝试尽可能地避免它们,如果不是那么问题,例如"我的行没有被插入但是插入没有失败"就产生了。