0

我的情况是,我在一个表中有 10 列。我从程序中插入 5 列,对于 5 列,我想创建一个触发器。是否可以?如果是,我该怎么做?

col1 col2 col3 col4 col5 col6 col7 col8 col9 col10

CREATE TRIGGER Fill_Trigger
   ON  DB 
   AFTER INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for trigger here
    DECLARE @COL6 INT
    DECLARE @COL7 INT -- and so on.


   SET @COL6 = (SELECT COL1 FROM inserted) * (SELECT COL2 FROM inserted)
   SET @COL7 = (SELECT COL3 FROM inserted) * (SELECT COL4 FROM inserted)

   --Is it possible to do the following?
  UPDATE inserted SET COL6 = @COL6
  UPDATE inserted SET COL7 = @COL7
END
GO
4

1 回答 1

1

您不应该在触发器中使用局部变量,因为它使其“仅单行”

另外,我假设您有一个名为 KeyColumn 的主键。你的表被称为“DB”。

CREATE TRIGGER Fill_Trigger
   ON DB 
   AFTER INSERT
AS 
BEGIN
   SET NOCOUNT ON;

   UPDATE DB
   SET
       Col6 = I.COL1 * COL2,
       Col7 = I.COL3 * COL4
   FROM
       DB
       JOIN
       INSERTED I ON DB.KeyColumn = I.KeyColumn;
END
GO

但是,有些列是基于其他列的,我会使用COMPUTED 列并且没有触发器

CREATE TABLE MyTable (
    KeyColumn ...,
    Col1 ...,
    Col2 ...,
    Col3 ...,
    Col4 ...,
    Col5 ...,

    Col6 AS Col1 * Col2,
    Col7 AS Col3 * Col4,
    Col8 AS ...

    );
于 2013-05-21T10:04:14.683 回答