我看到这个问题已被多次询问并取得了相当不错的结果,但是这个问题的不同之处在于我们想要在添加了alpha编号ID之后恢复为正常的自动增量ID。
我们有3个数据库,最终都会合并到一个数据库中。为了使我们的系统保持兼容,我们需要ID来保持合并。到目前为止,我们已经设法以字母数字方式组合数据,其中我们将记录ID与数据库源前缀,例如来自DBAA的ID现在是AA ##,而DBBB现在是BB ##。
现在的问题是,是否可以将varchar ID列恢复为自动增量整数,而无需在后端添加更多列或创建函数?我们的想法是新合并数据库中的下一个条目将高于3个DB中的最高条目,因此如果AA10最高,那么下一个条目将是11.(后端没有前缀且没有函数)< / p>
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)
当然,你可以想象这不起作用。最后,我只是想知道如果没有后端函数或其他列,这是否可行。
答案 0 :(得分: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
来实现
请注意,如果您不使用表设计器,则必须首先删除主键约束,然后才能删除列。