Я вижу, что этот вопрос задавался много раз с довольно хорошими результатами, однако этот отличается тем, что мы хотим вернуться к нормальному идентификатору автоматического увеличения после того, как мы добавили альфа-числовые идентификаторы.reverting alpha numeric identity
У нас есть 3 базы данных, которые в конечном итоге будут объединены в единую базу данных. Чтобы наша система оставалась совместимой, нам нужно, чтобы идентификаторы сохранялись в процессе слияния. До сих пор нам удалось объединить данные в алфавитном порядке, где мы префикс идентификатора записи с источником базы данных, например идентификаторы, которые поступали из DBAA, теперь AA ## и DBBB теперь BB ##.
Вопрос теперь, однако, можно ли вернуть столбец идентификатора varchar обратно в числовое число автоматического увеличения, не добавляя больше столбцов или создавая функции в конце? Идея состоит в том, что следующая запись в новой объединенной БД будет на один выше, чем самая высокая из 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)
Конечно, как вы можете себе представить, это не сработало. В конечном счете, я просто хочу знать, можно ли вообще обойтись без задних функций или дополнительных столбцов.
Подумайте об этом на секунду. У вас есть значения, такие как AA14, и вы хотите изменить столбец на int. Это никогда не сработает. То, что вы описываете, это две части информации, источник данных и числовое значение. НЕ заставляйте эти две части информации в одну колонку. Это нарушает 1NF и вызывает невыразимое количество боли. Вместо этого создайте два столбца, по одному для каждой части информации. –
Кроме того, если память используется, вы не можете изменить существующий столбец в столбец идентификатора –
@ ZoharPeled, это правильно, и я должен был упомянуть об этом ранее. Было так много других логических проблем, о которых я даже не думал об этой тонкости. :) –