根据同一个表中的另一列添加列中的数据

时间:2011-02-22 07:42:43

标签: sql-server sql-server-2005

尊敬 我已经使用ASP.net界面为员工信息创建了一个表 现在我显示在我的表中添加一个操作,如下所示,

我有四列(WorkDateyWorkDatemWorkDatedabsentday)表名称employee中整数类型的所有列。 现在我应该添加新列(realworkdays),这里的结果应该是输入以前的数据后自动保存为例:

    WorkDatey= 2011 ,
    WorkDatem= 2  ,
    WorkDated=14 ,
    absentday=6

操作应为:(2011 * 365)+(2 * 30)+(14) - (6),结果将存储在列(realworkdays)中。

我已经尝试过它作为触发器,但我有一些错误:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER daysResult
   ON  [dbo].[employee]
   AFTER insert
As
DECLARE @realworkdays int

BEGIN
    SET NOCOUNT ON;


select WorkDatey,WorkDatem,WorkDated,absent from [dbo].[employee]
@realworkdays= (workdatey*350)+(workdatem*29)+(workdated)-(absent)

insert into [dbo].[employee] (totaldays)values (@realworkdays)

END
GO

2 个答案:

答案 0 :(得分:4)

由于您使用的是sql server 2005,我建议您使用computed column

ALTER TABLE employee DROP COLUMN realworkdays;
ALTER TABLE employee ADD COLUMN realworkdays AS (
    (WorkDatey * 365) +
    (WorkDatem * 30) +
    (WorkDated) -
    (absentday)
)

您可以添加PERSISTED,以便存储数据,也可以将其编入索引。

在旁注中,您的触发器会插入一个新行,而不是更新当前行的值。

答案 1 :(得分:0)

您应该更新插入的记录,而不是插入新记录。

因此,它应该是UPDATE语句,您可以一次性完成计算和更新。

CREATE TRIGGER daysResult
ON [dbo].[employee]
AFTER insert
AS
BEGIN
  UPDATE employee
  SET realworkdays = (inserted.workdatey*350)+(inserted.workdatem*29)+
                     (inserted.workdated)-(inserted.absent)
  FROM inserted
  WHERE employee.ID = inserted.ID
END

仍然最好使用计算列,如@The Scrum Meister建议的那样。