Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL - INSERT dengan Scope_Identity() - mendapatkan id catatan

Mengapa Anda melakukan ini dalam banyak pernyataan? Mengapa tidak:

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);

Sekarang Anda hanya perlu memanggil satu ExecuteNonQuery() dan aplikasi Anda tidak perlu peduli dengan SCOPE_IDENTITY() actually yang sebenarnya nilai yang dihasilkan. (Anda masih dapat mengambil SCOPE_IDENTITY() jika Anda ingin, tentu saja, menggunakan ExecuteScalar - tapi seperti yang ditunjukkan Nenad dengan benar, pilih salah satu daripada memanggil keduanya.)

Karena sekarang kami tahu bahwa ada kunci asing eksplisit di sini, kami masih dapat mengurangi kode C# Anda menjadi satu panggilan meskipun kami tidak dapat menggunakan OUTPUT klausa.

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

Akan lebih bersih untuk memasukkan ini ke dalam prosedur tersimpan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa mengevaluasi tabel ini?

  2. Menemukan duplikat pada satu kolom menggunakan pilih tempat di SQL Server 2008

  3. Protokol Konfigurasi Jaringan Server Sql Tidak Tersedia

  4. Tampilan INFORMATION_SCHEMA SQL Server | Lihat apakah Tabel Ada

  5. Konfigurasikan Lucene.Net dengan SQL Server