【发布时间】:2022-01-23 18:10:38
【问题描述】:
我有一个表,其中有一列应该自动递增,但是它应该在另一个描述符列上递增
例如:
| Id | Filenumber | Descriminator | More Columns... |
|---|---|---|---|
| 2AA15D5E-F158-45AE-902C-CD49644846BC | 1 | A | |
| FE6B95EE-DFF4-48D4-9BD7-7DB4187A2D6D | 2 | A | |
| 2A132492-447A-485D-A546-2FB9158AE71B | 1 | B |
因此,如果我输入另一个带有描述符“A”的条目,我会得到文件编号 3。但是通过添加一个带有“B”的条目,我会得到 2,因为它是第 2 个“B”行。
我知道的唯一方法是更新触发器,但是否有更简单的解决方案,或者如果它是唯一的方法,它在流量大的情况下是否可靠(具有许多用户的负载平衡系统)?
【问题讨论】:
-
在视图中定义您的文件编号并查询视图。
-
不是
timestamp、@FlorianSchmidinger ,这是rowversion的已弃用同义词,但某种始终递增的值(IDENTITY或日期和时间值)会起作用。 -
“因为这个表经常改变。” 因为定义改变太频繁了?老实说,如果是这样的话,这听起来像是个问题。表的定义可以更改,是的,但不应该经常更改。
-
如果 Descriminator 是静态的,您可以使用 AFTER INSERT 触发器来计算新记录。但由于它可以更改,您可能应该将计算留给报告。使用 ROW_NUMBER 或 DENSE_RANK 函数很容易。
-
表架构更改过于频繁可能暗示架构未规范化。例如。您可以将受架构更改影响的属性移动到两个新表中。一个表
property唯一标识每个属性,一个连接表main_property具有该属性的main_id、property_id和value列。
标签: sql sql-server tsql