我正在创建一个表并设置一个触发器,使用field_1和2插入/更新field_3。请参阅下面的示例。
ID | Start_Date | End_Date | Period |
1 3/10/17 3/20/17 10
2 2/05/17 3/10/17 5
触发
ALTER TRIGGER [dbo].[tr_insert_Period]
ON [dbo].[MEDICAL_EXCUSE]
for update
AS
BEGIN
SET NOCOUNT ON;
declare @Start_Date Datetime
declare @End_Date Datetime
declare @Period Float
set @Start_Date = ( select me_start_date from inserted)
set @End_Date = ( select ME_End_Date from inserted)
set @Period = ( select Period from inserted)
update MEDICAL_EXCUSE
set @Period = DATEDIFF(day,@Start_Date , @End_Date)
END
如果你手动执行它不会触发工作。
任何帮助都得到了很多赞赏。
答案 0 :(得分:3)
不要使用触发器。只需使用计算列。我想这就是你想要的:
const slotTemplate = `<div><h4>This is the slot content</h4></div>`
const instance = new Slide();
instance.$slots.default = [instance.$createElement(Vue.compile(slotTemplate))];
instance.$mount("#container");
请注意alter table KOPS_MEDICAL_EXCUSE
add period as (DATEDIFF(day, me_start_date, me_end_date));
返回一个整数,因此没有理由将任何内容声明为datediff()
。
使用计算字段时,通常在查询表时计算该值。如果您想使用float
关键字,则可以实现该值。
答案 1 :(得分:1)
我在触发器中看到的几个问题。首先,你永远不能假设只有一条记录会被更新。企业数据库(通常是唯一需要触发器的复杂类型)通常在用户应用程序外部访问,并且可能会出现大型插入。
接下来,您希望从插入中获取记录,因此它需要是插入触发器。最后,您要更新变量@period的值,而不是表中的字段Period。
试试这个:
ALTER TRIGGER [dbo].[tr_insert_Period]
ON [dbo].[MEDICAL_EXCUSE]
for insert
AS
BEGIN
UPDATE ME
SET Period = DATEDIFF(day,i.Start_Date , i.End_Date)
FROM MEDICAL_EXCUSE ME
JOIN Inserted i on i.id = me.id
END
您可能也希望这也适用于更新,因此请执行以下操作:
FOR Insert, update