恢复字母数字标识

reverting alpha numeric identity

我看到这个问题已被问过很多次,而且结果相当好,但是这个问题的不同之处在于我们希望在添加字母数字 ID 后恢复到正常的自动递增 ID。

我们有 3 个数据库,它们最终将合并为一个数据库。为了让我们的系统保持合规,我们需要 ID 在合并过程中持续存在。到目前为止,我们已经设法以字母数字方式组合数据,我们在记录 ID 前加上数据库源,例如来自 DBAA 的 ID 现在是 AA##,而 DBBB 现在是 BB##。

但现在的问题是,是否可以将 varchar ID 列恢复为自动递增整数,而无需在后端添加更多列或创建函数?这个想法是新合并的 DB 中的下一个条目将比 3 个 DB 中最高的一个高,所以如果 AA10 最高,那么下一个条目将是 11。(没有前缀,后端没有功能)

CREATE TABLE tableTest
(
    colID varchar(50) PRIMARY KEY,
    [desc] varchar(10) NOT NULL
)   
ALTER TABLE tableTest ALTER COLUMN colID int NOT NULL IDENTITY(1,1)

当然,正如您想象的那样,这行不通。最后,我只想知道如果没有后端功能或附加列,这是否有可能实现。

因此,总结 Sean 和我的评论 - 答案是否定的。
这是不可能的,原因有很多。

您可以操作该列中的数据以创建唯一的数值(即假设您的值现在是唯一的)- 这样的事情就可以了:

UPDATE tableTest
    SET colId = REPLACE(REPLACE(REPLACE(colId, 'AA', ''), 'BB', ''), 'CC', '') + 
    CASE 
        WHEN colId LIKE 'AA%' THEN '1'
        WHEN colId LIKE 'BB%' THEN '2'
        WHEN colId LIKE 'CC%' THEN '3'
    END

这样您当前的数字部分将保持最有效的数字 - 所以如果您的 table 包含像
这样的值 . AA1, BB5, CC7, AA30, BB12,它现在将包含这些值:
. 11, 52, 73, 301, 122 - 如您所见,"order" 被保留。

另一种选择是添加一个新的标识列,删除当前的 colID 列,并将标识列重命名为 colID.
这可以通过使用 ssms 的 table 设计器或使用 sp_rename.
来实现 请注意,如果您不使用 table 设计器,则必须先删除主键约束,然后才能删除该列。