Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Auto-Tambah Lajur Bukan Identiti dalam SQL Server 2005 Tanpa Menggunakan ORDER BY dalam ROW_NUMBER()?

Bagaimanakah Saya Boleh Auto-Tambah Lajur Bukan Identiti dalam SQL Server 2005 Tanpa Menggunakan ORDER BY dalam ROW_NUMBER()?

Linda Hamilton
Linda Hamiltonasal
2024-12-26 18:44:09483semak imbas

How Can I Auto-Increment a Non-Identity Column in SQL Server 2005 Without Using ORDER BY in ROW_NUMBER()?

Mengelakkan ORDER BY dalam SQL Server 2005 ROW_NUMBER()

Apabila memasukkan data dari satu jadual ke dalam jadual yang lain, selalunya wajar untuk menambah automatik lajur bukan identiti dalam jadual sasaran. Walaupun fungsi ROW_NUMBER() boleh digunakan untuk mencapai ini, ia biasanya memerlukan medan ORDER BY. Walau bagaimanapun, jika susunan asal jadual sumber mesti dikekalkan, adalah perlu untuk mencari pendekatan alternatif.

Penyelesaian yang mengelakkan pesanan eksplisit melibatkan kod berikut:

INSERT dbo.TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
      + Coalesce(
         (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM dbo.SourceTable
WHERE {somecondition};

Kod ini menggunakan fungsi tetingkap untuk mengira nombor baris berdasarkan nilai malar, dengan berkesan menggantikan keperluan untuk klausa ORDER BY. Selain itu, untuk mengelakkan isu konkurensi, pertanyaan menggunakan pembayang kunci (TABLOCKX dan HOLDLOCK) sambil mengira nilai maksimum dalam jadual sasaran.

Perlu diambil perhatian bahawa walaupun pendekatan ini mengelak daripada menyatakan pesanan secara eksplisit, ia tidak t menjamin bahawa susunan asal jadual sumber akan dikekalkan. Faktor seperti susunan pertanyaan luar masih boleh mempengaruhi keputusan. Dari perspektif pangkalan data, konsep "mengekalkan susunan asal" tidak benar-benar wujud.

Untuk keselarasan optimum dan integriti data, penggunaan lajur identiti amat disyorkan untuk penyelesaian ini. Penguncian meja eksklusif melalui petunjuk kunci harus dielakkan melainkan sangat diperlukan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Auto-Tambah Lajur Bukan Identiti dalam SQL Server 2005 Tanpa Menggunakan ORDER BY dalam ROW_NUMBER()?. 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