主键范围取决于 SQL 服务器中的行类型
Primary key range depending on row type in SQL Server
我正在使用 SQL 服务器和 Entity Framework。我有一个有几千行的 table。
客户想要向此 table 添加新的数据类型。两种类型都由 MainType
列区分。
客户还希望 A 类行的 PK 值达到 1000000,B 类行的 PK 值大于 1000000。
我正在考虑使用 INSTEAD OF INSERT
触发器,但最好不要在触发器主体中指定每一列的名称,因为它们可能会更改。
是否可以创建更改主键列的触发器?
我知道这可能不是操作 PK 列的最佳选择。也许有办法在 Entity Framework 方面做到这一点?
这种情况的最佳做法是不自动生成列,而是自动生成数字。通过这种方式,您可以确保它们是独一无二的。 SQL 服务器(和其他平台)为此提供序列对象。
在这种情况下,您将使用您描述的起点创建两个序列对象。当您需要一种类型的 ID 时,您可以从该序列中获取它,而当您需要另一种类型的 ID 时,您可以从该类型的序列生成器中获取它。
仅供参考,我经常看到它用于一组序列是偶数(从 2 开始)而另一组是奇数(从 1 开始)的情况。但我也看到了你描述的非常高的第二组。
最常见的用例是全双工复制(您有两个相互复制的数据存储,可以获取新数据)。但是您的用例可以使用相同的技术。
我正在使用 SQL 服务器和 Entity Framework。我有一个有几千行的 table。
客户想要向此 table 添加新的数据类型。两种类型都由 MainType
列区分。
客户还希望 A 类行的 PK 值达到 1000000,B 类行的 PK 值大于 1000000。
我正在考虑使用 INSTEAD OF INSERT
触发器,但最好不要在触发器主体中指定每一列的名称,因为它们可能会更改。
是否可以创建更改主键列的触发器?
我知道这可能不是操作 PK 列的最佳选择。也许有办法在 Entity Framework 方面做到这一点?
这种情况的最佳做法是不自动生成列,而是自动生成数字。通过这种方式,您可以确保它们是独一无二的。 SQL 服务器(和其他平台)为此提供序列对象。
在这种情况下,您将使用您描述的起点创建两个序列对象。当您需要一种类型的 ID 时,您可以从该序列中获取它,而当您需要另一种类型的 ID 时,您可以从该类型的序列生成器中获取它。
仅供参考,我经常看到它用于一组序列是偶数(从 2 开始)而另一组是奇数(从 1 开始)的情况。但我也看到了你描述的非常高的第二组。
最常见的用例是全双工复制(您有两个相互复制的数据存储,可以获取新数据)。但是您的用例可以使用相同的技术。