@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 Ви згадуєте, що не знали, як "вставити значення", якщо "не було чого вставити". Там є протиріччя. Якщо вам нічого вставити, навіщо вставляти? Навіщо вам створювати, скажімо, новий запис КЛІЄНТА, якщо ви абсолютно нічого не знаєте про замовника? Не їх ім’я, місто, номер телефону, нічого?