自动为具有版本的数据设置状态字段

时间:2017-07-18 01:50:09

标签: sql-server

我是SQL Server新手。我在Azure中使用SQL Server,我正在寻找在输入新记录时完成设置状态字段的最佳方法。

我有以下数据:

我需要设置\计算Quote_Status字段。

  1. 添加新版本后,新版本的Quote_Status应为"打开"
  2. 对于以前的版本(或所有其他版本),Quote_Status应为" Versioned"
  3. 新版本定义为Quote_System,Quote_Date和Quote_ID都相等。

    添加新版本时,Quote_Status应如下所示:

    我已经考虑了触发器和计算字段,但我从来没有做过这样的事情,也不知道如何启动SQL。谢谢!

1 个答案:

答案 0 :(得分:1)

如果可以动态计算列,则可以使用以下内容:

SystemB

基本上,对于(Quote_System,Quote_Date,Quote_ID)的每个分组,我都按降序枚举版本。有了它,第一个(即with cte as ( select *, row_number() over ( partition by Quote_System, Quote_Date, Quote_ID order by QuoteVersion desc ) as rn from dbo.yourTable ) select *, case when rn = 1 then 'Open' else 'Versioned' end as Quote_Status from cte; )是开放的,而其余的是版本。在实际使用中,我会在实际选择中添加where子句,以便它有合理的机会表现良好。

如果你需要持久化并且Quote_Version单调增加,我宁愿在存储过程中这样做。像这样:

rn = 1

如果你真的需要一个触发器,我也可以想出类似的东西。但这是我最不理想的解决方案。