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

nhận ID bản ghi SQL mới

SELECT SCOPE_IDENTITY() 

sử dụng @@ IDENTITY có thể có kết quả không mong muốn, vì vậy hãy cẩn thận với cách bạn sử dụng. Các trình kích hoạt chèn bản ghi vào các bảng khác sẽ khiến giá trị @@ IDENTITY thay đổi - trong đó SCOPE_IDENTITY () sẽ cung cấp cho bạn danh tính cuối cùng chỉ từ phạm vi hiện tại của bạn.

Đây là một ví dụ sẽ cho thấy sự khác biệt giữa @@ IDENTITY và SCOPE_INSERT () và cách chúng có thể trả về các giá trị khác nhau ..

use tempdb
go
create table table1
    (ID int identity)
go
create table table2
    (ID int identity(100, 1))
go
create trigger temptrig 
    on table1 
    for insert
as
begin

    insert  table2 
     default values;

end
go
insert  table1 
default values;
select  SCOPE_IDENTITY(), 
        @@IDENTITY

Một tùy chọn khác mà chưa ai thảo luận ở đây là sử dụng mệnh đề OUTPUT trong SQL 2005. Trong trường hợp này, bạn chỉ cần thêm mệnh đề đầu ra vào phần chèn của mình, rồi bắt tập bản ghi đó từ mã của bạn. Điều này hoạt động tốt khi chèn nhiều bản ghi thay vì chỉ 1 ...

use tempdb
go
create table table1
    (ID int identity)
go
insert   table1 
output   inserted.ID
default values;
--OR...
insert   table1 
output   inserted.$identity
default values;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HOẶC không được hỗ trợ với Câu lệnh CASE trong SQL Server

  2. Có cách nào để truy cập giá trị hàng trước đó trong câu lệnh SELECT không?

  3. Rủi ro xung đột UUID sử dụng các thuật toán khác nhau

  4. Ký tự thoát trong SQL Server

  5. Cách tạo truy vấn tổng hợp trong máy chủ sql mà không có hàm tổng hợp