@Phil: Ý bạn không phải là bảng của bạn có hai (2) cột, cột PK tự động tăng và một cột AdminName? Nếu nó chỉ có một cột ở đó Tên quản trị viên, Tên quản trị viên là PK và tất nhiên bạn không thể tự động tăng thêm một chuỗi. Các quy tắc kinh doanh có mong đợi bạn đặt tên người dùng Windows đủ điều kiện làm khóa chính không? Điều đó sẽ khả thi và có ý nghĩa, vì khi đó bạn sẽ không cần một chỉ mục duy nhất thay thế trên cột AdminName.
Nhưng nếu bảng của bạn có hai cột, không phải một:
Trong SQLServer, autoincrement là một phần của định nghĩa bảng / cột. Bạn xác định cột là một số nguyên và sau đó cũng biến nó thành một cột nhận dạng, chỉ định gia số, thường là 1, nhưng nó có thể là 2 hoặc 5 hoặc 10 hoặc bất cứ điều gì. Để chèn một hàng, bạn chỉ cần chèn (các) giá trị cột khác và không làm gì với cột PK:
insert into T
(foo)
values('bar')
Proc được lưu trữ của bạn thực hiện việc chèn có thể đặt SCOPE_IDENTITY thành giá trị RETURN hoặc SCOPE_IDENTITY có thể được chuyển lại cho máy khách dưới dạng tham số OUT.
PS SCOPE_IDENTITY () trả về giá trị nhận dạng tự động được tạo gần đây nhất trong phạm vi hiện tại; nó không tạo ra giá trị nhận dạng tiếp theo.
BIÊN TẬP:
Có lẽ, bảng Quản trị viên của bạn chứa một tập hợp các quản trị viên. Nhưng nếu nó không có cột nào khác ngoài cột khóa chính số nguyên, thì không có cách nào để xác định người quản lý; điều duy nhất bạn có thể làm là phân biệt chúng với nhau. Điều đó không giúp bạn tiến xa chút nào. Nhưng nếu bảng Quản trị viên của bạn có một trong các cấu trúc sau:
ID INTEGER PRIMARY KEY AUTOINCREMENT
windowsusername varchar(50) (unique index)
HOẶC LÀ
windowsusername varchar(50) primary key
bạn sẽ có thể tham chiếu bảng Quản trị viên từ các bảng khác và các khóa ngoại sẽ CÓ Ý NGHĨA. Và đó chính xác là điều mà một bảng bao gồm một cột số nguyên thiếu - ý nghĩa.
Có hai cột, bạn có thể có một thủ tục được lưu trữ để thực hiện việc này:
insert into Administrators
(windowsusername)
values('mydomain\someusername');
return SCOPE_IDENTITY();
và chương trình khách hàng của bạn sẽ nhận lại dưới dạng giá trị trả về id tự động tăng cường đã được tự động tạo và gán cho hàng mới được chèn. Cách tiếp cận này là cách làm thông thường, và tôi muốn nói rằng nó được coi là "phương pháp tốt nhất".
Tái bút Bạn đề cập rằng bạn không biết cách "chèn giá trị" nếu bạn "không có gì để chèn". Có một mâu thuẫn ở đó. Nếu bạn không có gì để chèn, tại sao phải chèn? Tại sao bạn lại tạo hồ sơ KHÁCH HÀNG mới nếu bạn hoàn toàn không biết gì về khách hàng? Không phải tên của họ, thành phố của họ, số điện thoại của họ, không có gì?