Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Menggunakan ROW_NUMBER() Tanpa ORDER BY dalam SQL Server 2005?

Bagaimanakah Saya Boleh Menggunakan ROW_NUMBER() Tanpa ORDER BY dalam SQL Server 2005?

Susan Sarandon
Lepaskan: 2024-12-24 14:52:15
asal
754 orang telah melayarinya

How Can I Use ROW_NUMBER() Without ORDER BY in SQL Server 2005?

ROW_NUMBER() tanpa ORDER BY dalam SQL Server 2005

Dalam SQL Server 2005, fungsi ROW_NUMBER() boleh digunakan untuk menjana nombor jujukan unik untuk setiap baris dalam set hasil. Walau bagaimanapun, tidak seperti rakan sejawatannya dalam versi kemudian, ROW_NUMBER() dalam SQL Server 2005 memerlukan klausa ORDER BY yang jelas. Had ini menimbulkan cabaran apabila cuba menjana nombor berjujukan tanpa mengubah susunan asal data.

Penyelesaian:

Untuk mengatasi had ini, kita boleh mengelak daripada menyatakan pesanan eksplisit menggunakan pertanyaan berikut sintaks:

1

2

3

4

5

6

7

8

9

10

INSERT INTO TargetTable (ID, FIELD)

SELECT

   Row_Number() OVER (ORDER BY (SELECT 1))

      + Coalesce(

         (SELECT Max(ID) FROM TargetTable WITH (TABLOCKX, HOLDLOCK)),

         0

      ),

   FieldValue

FROM SourceTable

WHERE {somecondition};

Salin selepas log masuk

Penjelasan:

  • ORDER paling luar OLEH (PILIH 1) berfungsi sebagai pemegang tempat, dengan berkesan mengelakkan sebarang pesanan eksplisit.
  • Petua WITH (TABLOCKX, HOLDLOCK) digunakan untuk mengelakkan isu konkurensi dengan memastikan kunci meja eksklusif.

Pertimbangan:

  • Penyelesaian ini tidak menjamin bahawa susunan asal data akan dikekalkan. Faktor lain, seperti kunci dan proses serentak, boleh menjejaskan tertib yang terhasil.
  • Ia tidak secekap menggunakan lajur identiti untuk penambahan automatik.
  • Menggunakan lajur identiti adalah pilihan utama penyelesaian atas sebab keselarasan dan prestasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan ROW_NUMBER() Tanpa ORDER BY dalam SQL Server 2005?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan