добавление данных в столбец в зависимости от других столбцов в той же таблице - PullRequest
2 голосов
/ 22 февраля 2011

Дорогой я уже создал одну таблицу для информации о сотрудниках с интерфейсом ASP.net Теперь я показываю добавить одну операцию в моей таблице, как показано ниже,

у меня есть четыре столбца (WorkDatey, WorkDatem, WorkDated, absentday), все столбцы из целочисленного типа в имени таблицы 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 ]

4 голосов
/ 22 февраля 2011

Поскольку вы используете sql server 2005, я бы посоветовал вам использовать вычисляемый столбец

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

. Вы можете добавить PERSISTED, чтобы он сохранял данные, при необходимости индексируяit.

В примечании к вашему триггеру вставляется новая строка вместо обновления значения текущей строки.

0 голосов
/ 22 февраля 2011

Вы должны обновить вставленные записи, а не вставлять новые.

Итак, это должен быть оператор 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

Тем не менее, было бы лучше использовать вычисляемый столбец, как предложил @ Scrum Meister .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...