"В таблице может быть только один столбец IDENTITY" - Почему?
"В таблице может быть только один столбец IDENTITY"
Почему так? Возьмите сценарий транспортного средства, существует номер шасси, который является уникальным, а также регистрационный номер, который оказывается уникальным. Чтобы отобразить этот сценарий в sql server, нам нужна настраиваемая реализация для столбцов. И наоборот, в Oracle у вас может быть столько последовательностей, сколько вы хотите на таблице. Почему существует ограничение на столбце IDENTITY, какие-либо конкретные причины?
Сценарий наличия схемы транспортного средства является чем-то мнимым, и я спрашиваю себя, почему существует ограничение на столбец идентичности.
Ответы
Ответ 1
Столбец Identity в SQL Server имеет семя и автоинкремент. Мы всегда могли рассчитать, что должно быть 2-м гипотетическим значением id, если бы мы знали значение первого столбца id.
например. Если это был юридический синтаксис
create table #foo
(
bar int identity(1,10),
baz int identity(1000,1)
)
Нам не нужно будет хранить базу, поскольку она может быть рассчитана из строки следующим образом.
baz = 1000 + (bar-1)/10
Ответ 2
Потому что это будет одно и то же значение. если у вас есть идентификатор (1,1) в качестве основного и личность (100,2), вы получите следующие результаты:
1 100
2 102
3 104
4 106
5 108
6 110
7 112
8 114
9 116
10 118
вы можете получить второй столбец, выполнив следующее:
((ID-1) * 2) + 100
это линейное уравнение, так что будет точкой, отличной от показа?
Ответ 3
Данные хранятся в базе данных с помощью столбца IDENTITY
. Один такой столбец позволяет хранить файловую систему. Наличие нескольких столбцов IDENTITY
путало бы проблему.
Моя рекомендация - выбрать один из ваших столбцов как IDENTITY
или PRIMARY KEY
, а для другого - UNIQUE KEY
. Как пользователь не будет никакой разницы, но это сделает СУБД счастливым.
Ответ 4
- Последовательности Oracle не являются столбцами IDENTITY SQL Server: вы пишете для них некоторый код. Они не работают из коробки на основе CREATE TABLE DDL
- Любые последующие столбцы IDENTITY могут быть выработаны из первого (отредактируйте: как другие люди упомянутые)
Ответ 5
Причина в MSDN не объясняется, что я могу найти. Однако я подозреваю, что это связано с тем, как сервер sql реализует столбец идентификаторов. Концептуально я считаю, что это больше параметр или значение на уровне таблицы, чем на уровне столбца, а столбец - это просто способ получить доступ к значению. Я думаю, это потому, что все методы взаимодействия со значениями идентичности имеют таблицу как параметр, а не столбец, например. IDENT_SEED, IDENT_CURRENT и IDENT_INCR. Если это был параметр уровня столбца, параметры будут содержать имя столбца. Если в таблице было несколько столбцов, эти функции не помогли бы.
Я просто размышляю.
Ответ 6
Это глупое ограничение, я согласен. Это не слишком сложно обойти, хотя. Просто создайте отдельную таблицу с столбцом IDENTITY, чтобы использовать ее только как генератор последовательности. Вставьте в таблицу последовательностей, извлеките значение с помощью SCOPE_IDENTITY(), а затем вставьте значение, где хотите. Затем вы можете поддерживать столько последовательностей, сколько вам нужно.