【发布时间】:2016-02-24 14:42:48
【问题描述】:
我看到这个问题已经被问过很多次了,结果都很好,但是这个问题的不同之处在于,我们希望在添加字母数字 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)
当然,你可以想象那行不通。最终我只想知道这是否可以在没有后端函数或附加列的情况下实现。
【问题讨论】:
-
想一想。您有像 AA14 这样的值,并且您想将列更改为 int。那永远行不通。您所描述的是两条信息,一个数据源和一个数值。不要将这两条信息强行放在一个列中。这违反了 1NF 并导致无数的痛苦。相反,创建两列,每条信息各一列。
-
另外,如果没记错的话,您不能将现有列更改为标识列
-
@ZoharPeled 是正确的,我应该在前面提到它。还有很多其他的逻辑问题,我什至没有考虑过这种微妙之处。 :)
-
我意识到这不是解决这个问题的最佳方法,但我为一家真正希望这样做的公司工作。我已经设法将 ID 字段重做为 varchar,以便它处理 alpha 部分,我们可以制作它,所以下一个值就是我们正在寻找的,棘手的部分是在没有额外功能的情况下实现它。直接说吧,这可能吗?也许如果你有其他的想法也很棒:)
标签: sql-server identity alphanumeric