Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chèn các hàng vào bảng chỉ với một cột IDENTITY

Nếu bạn có một cột là IDENTITY, chỉ cần thực hiện điều này

INSERT MyTable DEFAULT VALUES;  --allows no column list. The default will be the IDENTITY
SELECT SCOPE_IDENTITY();

Nếu bạn không có danh tính, sau đó bạn có thể thiết lập nó? Đây là cách tốt nhất .. và sử dụng SQL ở trên.

Nếu không, bạn muốn chèn một hàng mới

INSERT MyTable (admidid)
OUTPUT INSERTED.admidid --returns result to caller
SELECT ISNULL(MAX(admidid), 0) + 1 FROM MyTable

Ghi chú:

  • Dưới mức tải cao, giải pháp MAX có thể không thành công với các bản sao
  • SCOPE_IDENTITY là sau thực tế là không xảy ra trước đây
  • SCOPE_IDENTITY chỉ hoạt động với cột IDENTITY. Ditto bất kỳ kẻ ngu ngốc nào bằng IDENT_CURRENT
  • Mệnh đề đầu ra thay thế SCOPE_IDENTITY cho giải pháp MAX


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết hợp nhiều kết quả trong một truy vấn con thành một giá trị được phân tách bằng dấu phẩy

  2. SQL Server Internals:Các toán tử có vấn đề Pt. III - Các loại

  3. Trả lại tất cả các hàng từ một phân vùng cụ thể trong SQL Server (T-SQL)

  4. Cách khắc phục “Chức năng phân vùng được liên kết tạo ra nhiều phân vùng hơn số nhóm tệp được đề cập trong lược đồ” Msg 7707 trong SQL Server

  5. Kích thước tối đa cho một truy vấn SQL Server? Mệnh đề IN? Có một phương pháp tiếp cận tốt hơn không