@Phil: Разве вы не имеете в виду, что в вашей таблице есть два (2) столбца: столбец PK с автоинкрементом и столбец AdminName? Если у него есть только один столбец, в который идет AdminName, AdminName - это PK, и, конечно, вы не можете автоматически увеличивать строку. Ожидают ли бизнес-правила, что вы сделаете полное имя пользователя Windows в качестве первичного ключа? Это было бы жизнеспособным и имело смысл, потому что тогда вам не понадобился бы альтернативный уникальный индекс в столбце AdminName.
Но если в вашей таблице два столбца, а не один:
В SQLServer автоинкремент является частью определения таблицы / столбца. Вы определяете столбец как целое число, а затем также делаете его столбцом идентификации, указывая приращение, обычно 1, но это может быть 2, 5 или 10 или что-то еще. Чтобы вставить строку, вы просто вставляете значения другого столбца и ничего не делаете со столбцом PK:
insert into T
(foo)
values('bar')
Ваша сохраненная процедура, которая выполняет вставку, может сделать SCOPE_IDENTITY значением RETURN или SCOPE_IDENTITY может быть передано обратно клиенту в качестве параметра OUT.
PS SCOPE_IDENTITY () возвращает последнее сгенерированное автоматически увеличивающееся значение идентификатора в текущей области; он не генерирует следующее значение идентичности.
РЕДАКТИРОВАТЬ:
Предположительно, ваша таблица администраторов содержит набор администраторов. Но если у него нет каких-либо столбцов, кроме столбца целочисленного первичного ключа, нет никакого способа идентифицировать администраторов; единственное, что вы можете сделать, это отличить их друг от друга. Это совсем не уведет вас далеко. Но если ваша таблица администратора имеет одну из следующих структур:
ID INTEGER PRIMARY KEY AUTOINCREMENT
windowsusername varchar(50) (unique index)
ИЛИ ЖЕ
windowsusername varchar(50) primary key
вы сможете ссылаться на таблицу администратора из других таблиц, а внешние ключи будут ЗНАЧИТЕЛЬНЫМИ. И именно этого не хватает в таблице, состоящей из одного целочисленного столбца, - смысла.
Имея два столбца, вы можете сделать это с помощью хранимой процедуры:
insert into Administrators
(windowsusername)
values('mydomain\someusername');
return SCOPE_IDENTITY();
и ваша клиентская программа вернет в качестве возвращаемого значения автоматически увеличенный идентификатор, который был автоматически сгенерирован и назначен вновь вставленной строке. Такой подход является обычной практикой, и я бы даже сказал, что он считается «лучшей практикой».
PS Вы упомянули, что не знали, как «вставить значение», если вам «нечего было вставлять». Здесь есть противоречие. Если вставлять нечего, зачем вставлять? Зачем вам создавать, скажем, новую запись CUSTOMER, если вы абсолютно ничего не знаете о клиенте? Ни имени, ни города, ни номера телефона, ничего?