Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Auto-Naik Lajur Bukan Identiti dalam SQL Server 2005 Tanpa ORDER BY?

Bagaimana untuk Auto-Naik Lajur Bukan Identiti dalam SQL Server 2005 Tanpa ORDER BY?

Mary-Kate Olsen
Lepaskan: 2024-12-30 02:59:24
asal
992 orang telah melayarinya

How to Auto-Increment a Non-Identity Column in SQL Server 2005 Without ORDER BY?

Menjana ID Auto-Tambahan dalam SQL Server 2005 tanpa ORDER BY

Keperluan untuk memasukkan data dari satu jadual ke dalam jadual lain semasa auto-increment lajur bukan identiti boleh menjadi satu cabaran. Pendekatan standard melibatkan penggunaan kursor atau mencipta pembolehubah jadual, tetapi ini boleh menjadi tidak cekap.

Jika tiada medan ORDER BY yang sah, fungsi ROW_NUMBER boleh digunakan. Walau bagaimanapun, ketiadaan pesanan yang jelas tidak menjamin pengekalan pesanan data asal. Ini kerana "tidak dipesan" berbeza daripada "mengekalkan pesanan asal."

Untuk menangani isu ini, penyelesaian melibatkan mengelakkan pesanan eksplisit seperti 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};
Salin selepas log masuk

Pendekatan ini mengira Maks ID dan memasukkan data semasa memperoleh kunci untuk mengelakkan ralat serentak.

Walau bagaimanapun, ambil perhatian bahawa menggunakan lajur identiti amat disyorkan sebagai ia menghapuskan keperluan untuk mengunci dan memastikan keselarasan optimum. Lajur identiti menyediakan penyelesaian yang lebih cekap dan mantap untuk ID peningkatan automatik dalam SQL Server.

Atas ialah kandungan terperinci Bagaimana untuk Auto-Naik Lajur Bukan Identiti dalam SQL Server 2005 Tanpa ORDER BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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