@Phil:テーブルに自動インクリメントPK列とAdminName列の2つの列があるということではありませんか?AdminNameが入る列が1つしかない場合、AdminNameはPKであり、もちろん文字列を自動インクリメントすることはできません。ビジネスルールでは、完全修飾Windowsユーザー名を主キーにすることを期待していますか?AdminName列に代替の一意のインデックスが必要ないため、これは実行可能で理にかなっています。
ただし、テーブルに1つではなく2つの列がある場合:
SQLServerでは、自動インクリメントはテーブル/列定義の一部です。列を整数として定義してから、増分(通常は1)を指定してID列にしますが、2、5、10などの場合もあります。行を挿入するには、他の列の値を挿入するだけで、PK列には何もしません。
insert into T
(foo)
values('bar')
挿入を行うストアドプロシージャは、SCOPE_IDENTITYをRETURN値にするか、SCOPE_IDENTITYをOUTパラメータとしてクライアントに返すことができます。
PS SCOPE_IDENTITY()は、現在のスコープで最後に生成された自動インクリメントされたID値を返します。次のID値は生成されません。
編集:
おそらく、Administratorsテーブルには一連の管理者が含まれています。ただし、整数の主キー列以外に列がない場合、管理者を識別する方法はありません。あなたができる唯一のことはそれらを互いに区別することです。それはあなたをまったく遠ざけません。ただし、Administratorテーブルに次のいずれかの構造がある場合:
ID INTEGER PRIMARY KEY AUTOINCREMENT
windowsusername varchar(50) (unique index)
または
windowsusername varchar(50) primary key
他のテーブルから管理者のテーブルを参照することができ、外部キーは意味があります。そして、それこそが、単一の整数列で構成されるテーブルに欠けているものです-意味。
2つの列がある場合、ストアドプロシージャに次のことを実行させることができます。
insert into Administrators
(windowsusername)
values('mydomain\someusername');
return SCOPE_IDENTITY();
クライアントプログラムは、自動生成され、新しく挿入された行に割り当てられた自動インクリメントされたIDを戻り値として返します。このアプローチは通常の方法であり、「ベストプラクティス」と見なされていると言えます。
PS「挿入するものがない」場合、「値を挿入する」方法がわからないとおっしゃっています。そこには矛盾があります。挿入するものがない場合、なぜ挿入するのですか?たとえば、顧客についてまったく何も知らないのに、なぜ新しいCUSTOMERレコードを作成するのでしょうか。彼らの名前、都市、電話番号、何もありませんか?