在SQL Server中添加两个列值以填充第三列,是否可以在没有触发器/存储过程的情况下完成此操作?

时间:2015-02-17 21:15:14

标签: sql-server stored-procedures triggers

我对此有一个非常具体的问题。我知道我可以使用SUM来对两列的值求和,但是,除了运行基本查询之外,还有一些其他需求需要处理。

  1. 表格中需要有第三列,其中包含两列的值。

  2. 每当创建一行或更新其他列中的两个值中的任何一个时,都需要更新第三列。

  3. 是否可以通过在列中设置默认值来实现这一点,并在更新其他两列中的任何一列时使用某种引用进行更新?这将是最简单的解决方案。或者,我是否需要触发/存储过程组合,无论何时创建行或更新这两列中的一列,都会触发并运行?如果是这样,我将如何实施?

    这是表创建:

    CREATE TABLE [dbo].[haems_callLog]
    (
        [month] [int] NOT NULL,
        [year] [int] NOT NULL,
        [total] [int] NOT NULL CONSTRAINT [DF_haems_callLog_total]  DEFAULT ((0)),
        [station] [nvarchar](4) NOT NULL CONSTRAINT [DF_haems_callLog_station]  DEFAULT (N'-'),
        [station1_Total] [int] NOT NULL CONSTRAINT [DF_haems_callLog_station1_total]  DEFAULT ((0)),
        [station2_Total] [int] NOT NULL CONSTRAINT [DF_haems_callLog_station2_total]  DEFAULT ((0))
    ) ON [PRIMARY]
    

    总字段默认为“0”。在创建记录时,只有月份,年份,工作站以及station1_Totalstation2_Total列将被输入数据。然后,总列需要取station1_Totalstation2_Total的值,并且除了另一列的“0”默认值之外,还要使用求和值填充。

    更新记录时,可以更改这两列中的任何一列,然后需要将其反映在总列中的总和值中。

    提前感谢您的帮助和指导!

1 个答案:

答案 0 :(得分:3)

只需定义计算列,如下所示:

ALTER TABLE [dbo].[haems_callLog]
ADD GrandTotal AS [station1_Total] + [station2_Total] PERSISTED

这会添加一个新列,它将始终反映这两列的总和 - 无论这些列包含哪些列。如果更新了两个基础列中的任何一个,则会始终更新此新计算列。