如何使用 Petapoco 将自动增量 ID 设置为另一列

Posted

技术标签:

【中文标题】如何使用 Petapoco 将自动增量 ID 设置为另一列【英文标题】:How to set auto incremented id to another column with using Peta Poco 【发布时间】:2019-11-28 14:24:06 【问题描述】:

我使用 C#、SQL Server 和 PetaPoco,默认情况下会自动递增 ID。我只想知道是否可以将此自动递增的 id 设置为另一列。

我还有 2 列需要设置为 ID 的确切值。是否可以在 SQL CREATE TABLE 语句中执行此操作,或者在 ExecuteNonQuery 之前或之后执行一些挂钩?如果可能的话,我不想创建视图或触发器。

【问题讨论】:

【参考方案1】:

是的,当然 - CREATE TABLE 允许您通过在列定义中添加 IDENTITY 关键字来定义 哪个 列将是自动增量列。这适用于任何基于整数的列,或 DECIMAL(p, 0) 类型的列(带有 0 比例 - 没有点后数字)。

例如

CREATE TABLE dbo.YourTable
(
    ID INT NOT NULL,
    SomeOtherColumn BIGINT IDENTITY(1,1) NOT NULL,
    ....
)

查看MS docs on CREATE TABLE了解完整和完整的详细信息

更新:因此您有 3 个独立的第三方应用程序,它们都访问此表,并且都希望找到特定列 - 您可以在其中之一创建标识列。另外两个可能是该身份列的计算、持久化“副本”——如下所示:

CREATE TABLE dbo.YourTable
(
    ID INT NOT NULL,
    YourIdentityColumn BIGINT IDENTITY(1,1) NOT NULL,
    ....
    SpecialColumnForApp2 AS YourIdentityColumn PERSISTED,
    SpecialColumnForApp3 AS YourIdentityColumn PERSISTED,
    ....
)

【讨论】:

但每个表只允许一个标识列。在创建新对象时,我有 3 列需要设置为相同的 ID。在您的示例中,我还需要 2 个 IDENTITY(1,1) NOT NULL 列。 @umtc:正如你所说 - 只有 one 列可以用 IDENTITY 值装饰。从 SQL Server 2012 开始,您可以为其他列创建 SEQUENCES,如果您真的需要它们(但 为什么?!?!?!?! 你需要在一个表中 三个 标识列吗??) 我想我无法解释清楚。我已经集成了 3 个项目,其中一个项目对 ID 有很多依赖项。如果我有时间,我会删除这个项目并从头开始编写代码。所以我不需要 3 个标识列,我只是问是否有办法在不编写更新脚本或创建视图或触发器的情况下使用标识列的值设置其他 2 个列。 @umtc:刚刚想到了一种可能的方法来处理这个问题 - 请参阅我更新的回复 - 使用 computed,persisted 列将身份列“复制”到其他列应用程序需要 - 很好地,声明式地,没有视图,没有触发器,不需要其他代码 这正是我想要的。谢谢楼主!

以上是关于如何使用 Petapoco 将自动增量 ID 设置为另一列的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的表的自动增量 id 设置为 700,即使同一张表上存在 1000 条记录?

是否可以指定使用 Hibernate 将 id 自动增量非空主键设置为 @ManyToMany 关系映射?

如何将自动增量 ID 重置为以前的 ID

Mongo的自动增量功能无法将Long设置为_id?

Hibernate 中的自动增量

如何在 Java 中为自动增量表创建查询?