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

SQL - INSERT với Scope_Identity () - lấy id bản ghi

Tại sao bạn làm điều này trong nhiều câu lệnh ngay từ đầu? Tại sao không:

INSERT dbo.Items (item_name,  item_cost, item_code) 
  OUTPUT inserted.ItemID, @ProjectID, @ItemQuantity 
  INTO dbo.project_items(item_id, project_id, item_quantity)
VALUES (@ItemName, @ItemCost, @ItemCode);

Bây giờ bạn chỉ phải gọi một ExecuteNonQuery() và ứng dụng của bạn không phải quan tâm đến SCOPE_IDENTITY() thực sự giá trị được tạo ra. (Bạn vẫn có thể truy xuất SCOPE_IDENTITY() tất nhiên nếu bạn muốn, hãy sử dụng ExecuteScalar - nhưng như Nenad đã chỉ ra một cách đúng đắn, hãy chọn một thay vì gọi cả hai.)

Vì bây giờ chúng tôi biết rằng có một khóa ngoại rõ ràng ở đây, chúng tôi vẫn có thể giảm mã C # của bạn thành một cuộc gọi ngay cả khi chúng tôi không thể sử dụng OUTPUT mệnh đề.

DECLARE @i INT;

INSERT dbo.Items (item_name,  item_cost, item_code) 
  SELECT @ItemName, @ItemCost, @ItemCode;

SELECT @i = SCOPE_IDENTITY();

INSERT dbo.project_items(item_id, project_id, item_quantity)
  SELECT @i, @ProjectID, @ItemQuantity 

SELECT @i; -- if necessary

Sẽ gọn gàng hơn nữa nếu đưa điều này vào một quy trình được lưu trữ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql server 2008 - hằng số không phải là số nguyên trong Mệnh đề ORDER BY

  2. Tìm điểm bắt đầu và kết thúc của một chuỗi chuyển hướng

  3. Chế độ lệnh SQL SQL SERVER - không thể in

  4. Làm cách nào để chèn / truy xuất tệp Excel vào cột varbinary (max) trong SQL Server 2008?

  5. Sử dụng FILE_IDEX () để trả lại ID của tệp cơ sở dữ liệu trong SQL Server