Rumah >pangkalan data >tutorial mysql >Apakah Perbezaan Antara `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()` dan `IDENTITY()` dalam SQL Server?

Apakah Perbezaan Antara `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()` dan `IDENTITY()` dalam SQL Server?

Linda Hamilton
Linda Hamiltonasal
2025-01-20 12:42:11501semak imbas

What are the Differences Between `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()`, and `IDENTITY()` in SQL Server?

Pemahaman mendalam tentang fungsi @@IDENTITY, SCOPE_IDENTITY(), IDENT_CURRENT() dan IDENTITY() dalam SQL Server

Dalam pengaturcaraan pangkalan data SQL, mendapatkan nilai identiti yang dimasukkan terakhir adalah tugas kritikal. Pelbagai fungsi disediakan untuk tujuan ini, masing-masing mempunyai nuansa tersendiri. SCOPE_IDENTITY(), IDENTITY(), @@IDENTITY dan IDENT_CURRENT() ialah beberapa fungsi yang paling biasa digunakan, tetapi perbezaan antara fungsi tersebut boleh mengelirukan.

Skop Pemahaman

Memahami konsep "skop" adalah kunci untuk memahami perbezaan antara fungsi ini. Dalam SQL, skop merujuk kepada tahap di mana pertanyaan atau blok kod dilaksanakan. Terdapat dua skop utama:

  • Skop sesi: Konteks sambungan pangkalan data tunggal.
  • Skop pertanyaan: Konteks pertanyaan tunggal atau prosedur tersimpan.

Perbezaan fungsi

Berdasarkan skop dan fungsi, berikut ialah pecahan setiap fungsi:

  • @@IDENTITY: Mengembalikan nilai identiti terakhir yang dibuat dalam sesi yang sama. Fungsi ini tidak bergantung pada skop pertanyaan atau prosedur tersimpan dan biasanya digunakan untuk mendapatkan nilai identiti global.
  • SCOPE_IDENTITY(): Mengembalikan nilai identiti terakhir yang dibuat dalam sesi dan skop yang sama. Tidak seperti @@IDENTITY, fungsi ini hanya mempertimbangkan konteks pertanyaan semasa atau prosedur tersimpan.
  • IDENT_CURRENT(name): Mengembalikan nilai identiti terakhir yang dibuat untuk jadual atau paparan tertentu, tanpa mengira sesi atau skop pertanyaan. Fungsi ini boleh digunakan untuk mendapatkan semula nilai identiti merentas pertanyaan dan sesi yang berbeza.
  • IDENTITY(): Tidak seperti tiga fungsi lain, IDENTITY() digunakan terutamanya untuk menjana nilai identiti dalam SELECT...INTO pertanyaan. Ia tidak mendapatkan semula nilai identiti sedia ada.

Senario penggunaan

Untuk menggambarkan perbezaan ini, pertimbangkan senario berikut:

  • Contoh 1: Sisipkan rekod dengan lajur identiti dan dapatkannya semula menggunakan @@IDENTITY.
<code class="language-sql">INSERT INTO MyTable (Name) OUTPUT INSERTED.ID INTO @Identity;
PRINT @Identity;  -- 打印全局插入的标识值</code>
  • Contoh 2: Buat pencetus pada MyTable untuk memasukkan rekod dalam jadual lain dan mendapatkan semula nilai identiti daripada kedua-dua jadual.
<code class="language-sql">CREATE TRIGGER MyTrigger ON MyTable AFTER INSERT AS
INSERT INTO OtherTable (Name) VALUES (NEW.Name);

INSERT INTO MyTable (Name) VALUES ('Test');

SELECT @@identity AS MyIdentity;  -- 打印在MyTable中插入的标识值
SELECT scope_identity() AS TriggerIdentity;  -- 打印触发器在OtherTable中插入的标识值</code>

Dalam senario ini, @@IDENTITY dan SCOPE_IDENTITY() berkelakuan berbeza disebabkan penglibatan pencetus.

Cadangan amalan terbaik

Dalam kebanyakan kes, SCOPE_IDENTITY() ialah fungsi yang disyorkan untuk mendapatkan semula nilai identiti terakhir yang dicipta. Ia memberikan nilai yang paling boleh dipercayai dan kontekstual dalam pertanyaan semasa atau prosedur tersimpan. Walau bagaimanapun, jika anda perlu mendapatkan semula nilai identiti dalam skop atau sesi yang berbeza, IDENT_CURRENT(name) menyediakan fungsi tersebut.

Atas ialah kandungan terperinci Apakah Perbezaan Antara `@@IDENTITY`, `SCOPE_IDENTITY()`, `IDENT_CURRENT()` dan `IDENTITY()` dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn