Nhận máy chủ SQL ID được chèn lần cuối

Tôi đã làm điều này bằng cách sử dụng tổng hợp có inputparamterid > tablesourceid làm bộ lọc, maxrecord = 1, sắp xếp theo desc rồi cập nhật dữ liệu

Sau đó, trên hành động máy chủ khác, tôi có một tổng hợp mà tôi lọc nó bằng Hiện tại. danh sách. TableId=createupdate_id(id từ dữ liệu được tạo hiện tại) sau đó gọi hành động trên.  

Khi người dùng SQL Server lưu trữ dữ liệu trong bảng cơ sở dữ liệu của họ, họ sử dụng cột nhận dạng làm khóa chính. Cột nhận dạng sẽ tự động tăng giá trị của nó bất cứ khi nào hàng mới được thêm vào. Tuy nhiên, trong một số trường hợp, người dùng có thể cần xác định bản ghi được chèn vào cuối cùng trong cơ sở dữ liệu. Blog sẽ giải thích một số cách có thể về cách tìm bản ghi được chèn cuối cùng trong SQL Server

Xác định bản ghi được chèn lần cuối trong SQL Server

Khi chúng tôi làm việc với bảng trong cơ sở dữ liệu SQL Server, chúng tôi đặt cột nhận dạng đóng vai trò là cột tăng tự động trong bảng để tăng giá trị ID cột bất cứ khi nào bản ghi mới được chèn vào. Giả sử chúng ta muốn chèn tên của nhân viên vào bảng 'Employees', chúng ta sẽ thực hiện việc đó bằng lệnh bên dưới

CHÈN GIÁ TRỊ VÀO Nhân viên (Tên) ('Mellisa')

Bây giờ, để lấy ID bản ghi được chèn mới nhất, chúng ta có thể sử dụng các tùy chọn sau

  1. CHỌN @@ IDENTITY
    • Nó trả về giá trị IDENTITY cuối cùng được tạo trên một kết nối, bất kể bảng tạo ra giá trị và phạm vi của câu lệnh tạo ra giá trị
    • Nó được sử dụng để đưa ra giá trị nhận dạng cuối cùng được tạo bởi câu lệnh
    • Nếu câu lệnh không ảnh hưởng đến bất kỳ bảng nào có cột nhận dạng, lệnh này sẽ trả về NULL
    • Nếu bảng chứa nhiều hàng tạo nhiều giá trị nhận dạng, @@IDENTITY trả về giá trị nhận dạng cuối cùng được tạo
    • Mặc dù @@IDENTITY bị giới hạn ở phiên hiện tại nhưng nó không giới hạn ở phạm vi hiện tại. Ngay cả khi trình kích hoạt trên bảng khiến danh tính được tạo, bạn sẽ nhận được danh tính được tạo lần cuối, ngay cả khi đó là trình kích hoạt
  2. CHỌN PHẠM VI_IDENTITY()
    • Như tên gợi ý, nó sẽ trả về danh tính cuối cùng được tạo trên một kết nối và theo câu lệnh trong cùng một phạm vi, bất kể bảng tạo ra giá trị
    • Nó được giới hạn trong phạm vi hiện tại và trong phiên hiện tại.
    • Nó sẽ trả về danh tính cuối cùng được tạo rõ ràng, thay vì bất kỳ danh tính nào được tạo bởi trình kích hoạt hoặc hàm do người dùng xác định
  3. CHỌN IDENT_CURRENT(‘Tên bảng’)
    • Nó trả về giá trị nhận dạng cuối cùng được tạo trong một bảng, bất kể kết nối và phạm vi của câu lệnh đã tạo ra giá trị
    • Nó không bị giới hạn bởi phạm vi và phiên nhưng bị giới hạn trong một bảng cụ thể
    • Nó sẽ trả về giá trị nhận dạng được tạo cho bảng cụ thể trong bất kỳ phiên nào hoặc bất kỳ phạm vi nào

Phần kết luận

Trong blog, chúng ta đã thảo luận về một số phương pháp mà qua đó chúng ta có thể tìm thấy bản ghi được chèn cuối cùng trong cơ sở dữ liệu SQL Server. Trong số các phương pháp, SCOPE_IDENTITY() được khuyến nghị vì nó tránh được các sự cố tiềm ẩn liên quan đến việc bổ sung trình kích hoạt trong khi trả về danh tính của bản ghi được chèn gần đây. Các phương pháp thủ công để xác định bản ghi được chèn lần cuối bằng các lệnh này đôi khi có thể mất thời gian và khó khăn đối với người dùng không có kỹ thuật. Một trong những cách thay thế dễ dàng cho cùng một mục đích là sử dụng công cụ của bên thứ ba để xem nhật ký giao dịch SQL Server được sử dụng để đọc và phân tích các giao dịch Tệp Nhật ký SQL Server sẽ cung cấp phân tích chi tiết về tất cả các giao dịch như chèn, xóa, cập nhật, v.v.

Điều này sẽ trả về giá trị nhận dạng được thêm gần đây nhất được tạo trên cùng một kết nối, trong phạm vi hiện tại. Trong trường hợp này, 1, cho hàng đầu tiên trong dbo. bàn người

@@XÁC THỰC

Điều này sẽ trả về danh tính được thêm gần đây nhất trên cùng một kết nối, bất kể phạm vi. Trong trường hợp này, bất kể giá trị hiện tại của cột nhận dạng trên logging_table là gì, giả sử không có hoạt động nào khác xảy ra trên phiên bản SQL Server và không có trình kích hoạt nào khác kích hoạt từ phần chèn này

IDENT_CURRENT('tên bảng')

Thao tác này sẽ chọn giá trị nhận dạng được thêm gần đây nhất trên bảng đã chọn, bất kể kết nối hay phạm vi

Nếu chúng tôi thực hiện CHÈN hoặc CẬP NHẬT trên một bảng có trường AUTO_INCREMENT, chúng tôi có thể nhận ngay ID của bản ghi được chèn/cập nhật lần cuối

Trong bảng "MyGuests", cột "id" là trường AUTO_INCREMENT

TẠO BẢNG MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tên VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

Các ví dụ sau giống với các ví dụ từ trang trước (PHP Chèn dữ liệu vào MySQL), ngoại trừ việc chúng tôi đã thêm một dòng mã để truy xuất ID của bản ghi được chèn lần cuối. Chúng tôi cũng lặp lại ID được chèn lần cuối

Làm cách nào để lấy ID được chèn lần cuối trên SQL Server?

IDENT_CURRENT() sẽ cung cấp cho bạn giá trị nhận dạng cuối cùng được chèn vào một bảng cụ thể từ bất kỳ phạm vi nào, bởi bất kỳ người dùng nào. @@IDENTITY cung cấp cho bạn giá trị nhận dạng cuối cùng được tạo bởi câu lệnh INSERT gần đây nhất cho kết nối hiện tại, bất kể bảng hoặc phạm vi

Làm cách nào để lấy id tăng tự động được chèn lần cuối trong SQL Server?

Sử dụng SCOPE_IDENTITY. -- hãy chèn SELECT SCOPE_IDENTITY(); . Giá trị nhận dạng cuối cùng được chèn vào một cột nhận dạng trong cùng một phạm vi

Chủ đề