【问题标题】:SQL Server : fire trigger on SELECT? (Calculated Column)SQL Server:SELECT 上的触发触发器? (计算列)
【发布时间】:2017-04-13 15:58:08
【问题描述】:

我需要一个动态列,以便根据从现在到日期列 Expiration Date 之间的天数计算列 DaysToExpiration

我的计划是添加一个在表的 SELECTstatement 上触发的触发器。

  1. 这可能吗?怎么样?
  2. 有没有更好的方法来解决这个问题?

【问题讨论】:

  • 是的,计算列将是更好的选择 IMO
  • 表上的视图是要走的路,创建一个触发器来将信息存储在其他地方,甚至有一个计算列来显示 DaysToExpiration 似乎过度杀戮,有些人甚至可能会说违反数据库规范化规则。
  • @M.Ali 视图是个好主意。但我很好奇,为什么你认为它与计算列不同?为什么你认为它更好?
  • @Lamak 为什么它比计算列好,我想没有你不需要的额外列是一件好事,不必维护额外的列,你甚至不能创建任何关于它的索引等等。我希望你明白这一点。当值需要在插入时计算并且它是持久的(持久列也允许在该列上创建索引)时,计算列通常是一个好主意,例如DaysToExpiration(需要在被查询时计算)在我看来,视图是一个更好的选择
  • (1) 的响应:NO - SQL Server 在SELECT 上没有任何触发器 ....

标签: sql-server triggers calculated-columns


【解决方案1】:

您说“我的计划是添加一个触发器,该触发器在表的 SELECT 语句上触发。”

既然如此,为什么还要有一列,为什么不在最终查询中选择它呢?

Select DateDiff(day,getdate(),ExpirationDate) AS [DaysToExpiration]

如果必须将其持久化并存储在列中,则可以按照 cmets 中的建议将其设为计算列。或者,您可以在 UPDATE/INSERT 上触发表,因此当插入或更新 ExpirationDate 时,它​​将 DaysToExpiration 列设置为所提供代码的结果。

【讨论】:

    【解决方案2】:

    不,没有规定在 SELECT 操作上触发。您可以使用从 SELECT 查询中获取参数的存储过程,并在所需的 SELECT 查询后调用此过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 2013-12-11
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多