还原字母数字标识



我看到这个问题已经被问了很多次,结果相当不错,但是这个问题的不同之处在于,我们希望在添加字母编号 ID 后恢复为正常的自动增量 ID。

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

现在的问题是,是否可以在不添加更多列或在后端创建函数的情况下将 varchar ID 列恢复为自动递增整数?这个想法是,新合并数据库中的下一个条目将比 3 个数据库中的最高条目高一个,因此如果 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)

当然,正如你可以想象的那样,这并没有奏效。最终,我只想知道这是否可以在没有后端函数或其他列的情况下完成。

所以,总结肖恩和我的评论 - 答案是否定的。
由于许多原因,这是不可能的。

您可以操作该列中的数据以创建唯一的数值(前提是您的值现在是唯一的) - 像这样的东西就可以了:

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

这样,您当前的数字部分将保持最高有效数字 - 因此,如果您的表包含诸如
. AA1, BB5, CC7, AA30, BB12,它现在将包含以下值:
. 11, 52, 73, 301, 122 - 如您所见,"订单"被保留。

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

最新更新