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};
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!