【问题标题】:Computed Columns - Needs an Introduction计算列 - 需要介绍
【发布时间】:2012-04-09 11:37:02
【问题描述】:

问题就是标题本身。我被要求在 SQL Server 中使用计算列。但是当我在谷歌上搜索它时,我发现它主要用于显示多个列的组合值。如果将其视为永久列,则使用它可能会降低性能。所以我想知道

  1. 优缺点
  2. 我们需要在何时何地实施此功能

如果可能的话,请指导我如何解决以下问题(使用计算列。如果不可能,为什么?)。或任何其他方式来实现此要求。 我的要求是使用一个列来识别该表的哪个列已更新。 所以我可以比较这些值并识别变化。

EDIT:下面的表结构。

table structure
 ColA int ID (PK) - autonumber.
 ColB Nvarchar
 ColC Nvarchar
 ColD Int
 ColE Int
 ColF Nvarchar

-- Updatation can happen any one the coloumns other than ColA 

提前致谢

【问题讨论】:

  • 标题中的问题与您的文本中的不同。似乎您实际上并不想要一般计算列的优缺点列表,而是询问它是否可能/适合您的特定场景? (答案:顺便说一句,这是不可能的,除非我不完全了解您要做什么,否则您将需要一个触发器)
  • @MartinSmith 请查看我更新的问题
  • 您可以使用复合 case 表达式(每列一个 case 表达式)来计算表示列更改的位掩码。如果您发布您正在使用的表格的代码示例,我们可以给您更具体的答案。
  • @isme:有什么理由不使用 COLUMNS_UPDATED() 而不是自己滚动? msdn.microsoft.com/en-us/library/ms186329.aspx

标签: asp.net sql-server vb.net sql-server-2008


【解决方案1】:

听起来您需要触发器,而不是计算列。您的最后一句话表明您要“比较值并确定更改。”。你的最终目标是什么?您是否尝试保留此信息,以便未来的数据阅读器可以使用该信息?还是为了您自己的编程需求,以便在数据更改时您可以通过编程完成某些事情?在这两种情况下,触发器都会让您有机会在变化时询问正在发生的变化。您可以使用 COLUMNS_UPDATED() 之类的 @isme: 在触发器中建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2012-01-29
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多