关于下一键定义

下一键功能可让长时间运行的处理获取列条目的下一个值,使用或不使用前缀,且不会阻碍正在执行相同操作的其他处理。这类存储过程调用可以使用应用程序架构列元数据表单的生成器字段设置。

下一键定义的工作原理

下一键调用的根存储过程如下所示:

EXEC @Severity = dbo.Next2SubKeySp 
   @TableName      = @TableName
 , @ColumnName   = @ColumnName
 , @Prefix                   = @Prefix
 , @KeyLength         = @KeyLength
 , @SubKey              = @SubKey
 , @Increment          = @Increment
 , @KeyVal               = @KeyVal OUTPUT
 , @Infobar                = @Infobar OUTPUT 

例如:应用程序代码可能包含客户订单号列,该列可能使用或可能不使用前缀。因此,前缀为TG的客户订单号可能是 TG00000109,而不使用任何前缀的客户订单号可能是 0000000547。

如果存在两个处理,则同时调用 CustomerOrder 表的 Next2SubKeySp 代码和 CoNum 列,请求前缀 TG 的下一键,处理将从 NextKeys 表获取下两个值(TG00000110 和 TG00000111)。不会存在阻塞且两个值都将存储在 NextKeys 表中。

同步下一键值需要系统返回到基本表以确定每个前缀的当前高值。这是下一键定义发挥作用的位置。这些定义包含元数据,用于指明具有下一键关联的表和列。

关于主要和次要规范

在某些情况下,用户可能具有包括与其他表相同的下一键关联的存档表。例如,用户可能具有名为 CustomerOrderHistory 的表,其中保存了从 CustomerOrder 表存档的历史数据。那么,CustomerOrder 表将视为“主”表。CustomerOrderHistory 表将视为“辅助”表,在同步下一键时,也需要检查该表,因为两者中的任何一个表都可能包含当前最大键值。

关于子键

子键列允许根据其他列的值对下一键进行分组。

例如,InteractionID基于DayOfInteraction子键列可能存储在 DailyInteraction 表中。在此情况下,需要将InteractionID以 1 开始并随每个额外条目递增,但仅适用于指定的DayOfInteraction值。要查看指定日期的当前最大值,则将更改下一键请求中的子键值。

表 1. DailyInteraction 表
DayOfInteraction InteractionID
07/04/1776 1
07/04/1776 2
07/04/1776 3
07/05/1776 1
07/05/1776 2

在此情况下,下一键同步将查看 DailyInteraction 表,并确定每个DayOfInteraction值的当前最大InteractionID。在本例中,有两组值:07/04/1776, 3 和 07/05/1776, 2。这些值将插入 NextKeys 表,以便可以正确处理该表和列的下一键处理。

关于主表和主要列

主表主要列选项仅用于子键处理的只有整数的特殊情况。下一键通常基于字符,但在特定情况下,下一键基于整数且子键列在单独的表中定义。

例如,假设日记帐表包含BatchID列和顺序列,而顺序列基于整数。在此情况下,必须定义包含BatchID值(即子键值)列表的单独表。非主子键数据总是基于字符,而主子键数据总是基于整数。

相关主题