@Phil: Czy nie masz na myśli, że twoja tabela ma dwie (2) kolumny, kolumnę PK z automatyczną inkrementacją i kolumnę AdminName? Jeśli ma tylko jedną kolumnę, w której znajduje się AdminName, AdminName jest PK i oczywiście nie można automatycznie zwiększać ciągu. Czy reguły biznesowe wymagają, aby w pełni kwalifikowana nazwa użytkownika systemu Windows była kluczem podstawowym? Byłoby to wykonalne i sensowne, ponieważ wtedy nie byłby potrzebny alternatywny unikalny indeks w kolumnie AdminName.
Ale jeśli twoja tabela ma dwie kolumny, a nie jedną:
W SQLServer autoincrement jest częścią definicji tabeli / kolumny. Definiujesz kolumnę jako liczbę całkowitą, a następnie ustawiasz ją jako kolumnę tożsamości, określając przyrost, zwykle 1, ale może to być 2, 5 lub 10 lub cokolwiek. Aby wstawić wiersz, wystarczy wstawić inne wartości kolumn i nic nie robić z kolumną PK:
insert into T
(foo)
values('bar')
Twój zapisany proces, który wykonuje wstawianie, może uczynić SCOPE_IDENTITY wartością RETURN lub SCOPE_IDENTITY może zostać przekazany klientowi jako parametr OUT.
PS SCOPE_IDENTITY () zwraca ostatnio wygenerowaną wartość tożsamości automatycznie inkrementowaną w bieżącym zakresie; nie generuje następnej wartości tożsamości.
EDYTOWAĆ:
Przypuszczalnie twoja tabela Administratorzy zawiera zestaw administratorów. Ale jeśli nie ma żadnych kolumn poza kolumną klucza podstawowego w postaci liczby całkowitej, nie ma możliwości zidentyfikowania administratorów; jedyne, co możesz zrobić, to odróżnić je od siebie. To wcale nie prowadzi zbyt daleko. Ale jeśli twoja tabela administratora miała jedną z następujących struktur:
ID INTEGER PRIMARY KEY AUTOINCREMENT
windowsusername varchar(50) (unique index)
LUB
windowsusername varchar(50) primary key
mógłbyś odwołać się do tabeli Administratora z innych tabel, a klucze obce byłyby ZNACZNE. I właśnie tego brakuje tabeli składającej się z jednej kolumny całkowitej - czyli.
Mając dwie kolumny, możesz wtedy wykonać procedurę składowaną:
insert into Administrators
(windowsusername)
values('mydomain\someusername');
return SCOPE_IDENTITY();
a program-klient odzyskałby jako wartość zwracaną automatycznie zwiększany identyfikator, który został wygenerowany automatycznie i przypisany do nowo wstawionego wiersza. Takie podejście jest zwykłą praktyką i posunąłbym się nawet do stwierdzenia, że jest uważane za „najlepszą praktykę”.
PS Wspomniałeś, że nie wiedziałeś, jak „wstawić wartość”, jeśli „nie masz nic do wstawienia”. Jest w tym sprzeczność. Jeśli nie masz nic do wstawienia, po co wstawiać? Dlaczego miałbyś tworzyć, powiedzmy, nowy rekord KLIENT, jeśli nie wiesz absolutnie nic o kliencie? Nie imię, nazwisko, miasto, numer telefonu, nic?