Làm thế nào để chèn vào một bảng chỉ với một cột IDENTITY?


84

(Đưa ra câu hỏi này trong quá trình cố gắng trả lời câu hỏi kia )

Hãy xem xét bảng MS-SQL sau, được gọi là GroupTable:

Id nhóm
-------
1  
2  
3  

trong đó GroupID là khóa chính và là cột Danh tính.

Làm cách nào để bạn chèn một hàng mới vào bảng (và do đó tạo ID mới) mà không sử dụng IDENTITY_INSERT ON?

Lưu ý rằng điều này:

INSERT INTO GroupTable() Values ()   

... sẽ không hoạt động.

chỉnh sửa: chúng ta đang nói SQL 2005 hoặc SQL 2008 ở đây.

Câu trả lời:


126

Điều này sẽ hoạt động:

INSERT INTO GroupTable DEFAULT VALUES 

Tôi không thể làm cho cái này hoạt động với Visual Studio 2008 / SQL Express 2005. Có ý kiến ​​gì không? Cùng một bố cục bảng, một cột, khóa chính, danh tính (1,1).
Thomas Sandberg,

Tôi đang sử dụng SQL 2008 R2, tôi cũng không vui!
TDaver

Làm việc cho tôi trên SQL Server 2008 Express.
Adrian Lynch

3
@RomanPekar, trong SqlServer 2008 trở về sau, có thể sử dụng mergetoán tử. Ví dụmerge into TableName using (values (1), (2), (3)) s(n) on 1=0 when not matched then insert default values;
i-one,

17

Của bạn đây:

INSERT INTO GroupTable DEFAULT VALUES

3

Có thể chèn nhiều hàng cùng một lúc.

Ví dụ: để chèn 30 hàng. CHÈN VÀO CÁC GIÁ TRỊ ĐỊNH NGHĨA CỦA Bảng GroupTable ĐI 30

Thao tác này sẽ chèn 30 hàng bằng cách tăng cột nhận dạng mỗi lần.


Không chắc về SQL 2008, nhưng trong 2008R2 này không làm việc (tôi nhận được lỗi chung chung "cú pháp hợp lệ gần 'GO'")
Elaskanator

0

Bạn có thể thử sử dụng Trình tự hoặc thứ gì đó tương tự không? Nơi bạn chọn từ một Chuỗi và nó sẽ cung cấp cho bạn giá trị tiếp theo trong chuỗi.


Tôi nghĩ anh ấy đang nói về Oracle DB
codeulike

Tôi biết các chuỗi tồn tại trong Oracle và không chắc điều gì có thể so sánh được (nếu có) tồn tại trong SQL Server. Đó là lý do tại sao tôi đặt nó bằng "hoặc một cái gì đó tương tự" và sau đó đưa ra một định nghĩa của một Trình tự để tham khảo.
Mike Pone

3
SQL Server 2012 có SEQUENCE s.
Nick Chammas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.