@Phil: Đừng bạn có nghĩa là bảng của bạn có hai (2) cột, cột PK autoincrementing và một cột AdminName? Nếu nó chỉ có một cột nơi AdminName đi, AdminName là PK và bạn không thể autoincrement một chuỗi, tất nhiên. Các quy tắc kinh doanh có mong đợi bạn tạo một tên người dùng Windows đủ điều kiện là khóa chính không? Điều đó sẽ là khả thi và có ý nghĩa, bởi vì sau đó 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àn của bạn có hai cột, không phải là một:
Trong SQLServer các autoincrement là một phần của định nghĩa bảng/cột. Bạn xác định cột dưới dạng số nguyên và sau đó cũng làm cột đó thành cột số , chỉ định số gia tăng, thường là 1, nhưng có thể là 2 hoặc 5 hoặc 10 hoặc bất kỳ thứ gì. Để chèn một hàng, bạn chỉ cần chèn cột khác (s) giá trị (s) và không phải làm gì với cột PK:
insert into T
(foo) -- column(s) list
values('bar') -- values list
proc lưu trữ của bạn mà không được chèn có thể làm cho SCOPE_IDENTITY một giá trị RETURN hoặc SCOPE_IDENTITY có thể truyền lại cho máy khách như một tham số OUT.
P.S.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.
EDIT:
Có lẽ, bảng Quản trị viên của bạn chứa một nhóm quản trị viên. Nhưng nếu nó không có cột nào khác hơn cột số nguyên chính, thì không có cách nào để xác định người quản trị; đ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 mang lại cho bạn rất nhiều ở tất cả. Nhưng nếu bảng quản trị 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
windowsusername varchar(50) primary key
bạn sẽ có thể tham khảo bảng của quản trị từ các bảng khác, và các phím nước ngoài sẽ có ý nghĩa. Và đó là chính xác những gì một bảng bao gồm một cột nguyên duy nhất thiếu - ý nghĩa.
Có hai cột, sau đó bạn có thể có một thủ tục lưu trữ làm điều này:
insert into Administrators
(windowsusername)
values('mydomain\someusername');
return SCOPE_IDENTITY();
và client-chương trình của bạn sẽ trở lại như một giá trị trả về id autoincremented đã được autogenerated và giao cho mới được chèn vào hàng. Cách tiếp cận này là thực hành thông thường, và tôi sẽ đi xa như vậy để nói rằng nó được coi là "thực hành tốt nhất".
P.S. Bạn đề cập đến rằng bạn không biết làm thế nào để "chèn một giá trị" nếu bạn "không có bất cứ điều gì để chèn". Có một mâu thuẫn ở đó. Nếu bạn không có gì để chèn, tại sao chèn? Tại sao bạn sẽ tạo ra, nói, một hồ sơ KHÁCH HÀNG mới nếu bạn biết hoàn toàn không có 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ì?
Để làm rõ: câu hỏi của bạn là "cách chèn hàng trong bảng SQL Server với một cột IDENTITY"? – gbn
Có, bạn nói đúng, cảm ơn bạn đã làm rõ – Phil
Đối với những người đến đây, câu hỏi này đã được hỏi trước và câu trả lời đúng là ở đây: http: // stackoverflow.com/questions/850327/how-to-insert-in-a-table-với-chỉ-một-nhận dạng-cột – BJury