@Phil : Ne voulez-vous pas dire que votre table a deux (2) colonnes, la colonne PK auto-incrémentée et une colonne AdminName ? S'il n'y a qu'une seule colonne où le nom d'administrateur va, le nom d'administrateur est le PK et vous ne pouvez pas auto-incrémenter une chaîne, bien sûr. Les règles de gestion prévoient-elles que vous fassiez d'un nom d'utilisateur Windows entièrement qualifié la clé primaire ? Cela serait viable et logique, car vous n'auriez alors pas besoin d'un index unique alternatif sur la colonne AdminName.
Mais si votre tableau a deux colonnes, pas une :
Dans SQLServer, l'auto-incrément fait partie de la définition de la table/colonne. Vous définissez la colonne comme un nombre entier et vous en faites également une colonne d'identité. en spécifiant l'incrément, généralement 1, mais cela peut être 2, 5, 10 ou autre. Pour insérer une ligne, il suffit d'insérer la ou les valeurs des autres colonnes et de ne rien faire avec la colonne PK :
insert into T
(foo) -- column(s) list
values('bar') -- values list
Votre procédure stockée qui effectue l'insertion peut faire de SCOPE_IDENTITY une valeur RETURN ou SCOPE_IDENTITY peut être renvoyé au client comme paramètre OUT.
P.S. SCOPE_IDENTITY() renvoie la valeur d'identité autoincrémentée la plus récemment générée dans l'étendue actuelle ; elle ne génère pas la valeur d'identité suivante.
EDITAR:
Vraisemblablement, votre table Administrateurs contient un ensemble d'administrateurs. Mais si elle n'a aucune colonne autre que la colonne de clé primaire entière, il n'y a aucun moyen d'identifier les administrateurs ; la seule chose que vous pouvez faire est de les distinguer les uns des autres. Cela ne vous mène pas très loin. Mais si votre table Administrateur avait l'une des structures suivantes :
ID INTEGER PRIMARY KEY AUTOINCREMENT
windowsusername varchar(50) (unique index)
OU
windowsusername varchar(50) primary key
vous seriez en mesure de faire référence à la table de l'administrateur à partir d'autres tables, et les clés étrangères auraient un sens. Et c'est précisément ce qui manque à une table constituée d'une seule colonne d'entiers : du sens.
En ayant deux colonnes, vous pourriez alors avoir une procédure stockée pour faire cela :
insert into Administrators
(windowsusername)
values('mydomain\someusername');
return SCOPE_IDENTITY();
et votre programme-client obtiendrait comme valeur de retour l'identifiant autoincrémenté qui a été autogénéré et attribué à la ligne nouvellement insérée. Cette approche est la pratique habituelle, et j'irais même jusqu'à dire qu'elle est considérée comme une "meilleure pratique".
P.S. Vous mentionnez que vous ne saviez pas comment "insérer une valeur" si vous "n'aviez rien à insérer". Il y a là une contradiction. Si vous n'avez rien à insérer, pourquoi insérer ? Pourquoi créer, par exemple, un nouvel enregistrement CLIENT si vous ne savez absolument rien du client ? Pas son nom, sa ville, son numéro de téléphone, rien ?