pertanyaan ditanyakan sebelumnya.
Anda dapat menentukan ORDER BY
di INSERT
.
Jika Anda melakukannya, urutan IDENTITY
nilai yang dihasilkan dijamin cocok dengan ORDER BY
yang ditentukan di INSERT
.
Menggunakan contoh Anda:
DECLARE @blah TABLE
(
ID INT IDENTITY(1, 1) NOT NULL,
Name VARCHAR(100) NOT NULL
);
INSERT INTO @blah (Name)
SELECT T.Name
FROM
(
VALUES
('Timmy'),
('Jonny'),
('Sally')
) AS T(Name)
ORDER BY T.Name;
SELECT
T.ID
,T.Name
FROM @blah AS T
ORDER BY T.ID;
Hasilnya adalah:
+----+-------+
| ID | Name |
+----+-------+
| 1 | Jonny |
| 2 | Sally |
| 3 | Timmy |
+----+-------+
Yaitu, Name
telah diurutkan dan ID telah dibuat menurut urutan ini. Dijamin Jonny akan memiliki ID terendah, Timmy akan memiliki ID tertinggi, Sally akan memiliki ID di antara mereka. Mungkin ada kesenjangan antara nilai ID yang dihasilkan, tetapi urutan relatifnya dijamin.
Jika Anda tidak menentukan ORDER BY
di INSERT
, lalu menghasilkan IDENTITY
ID dapat dibuat dalam urutan yang berbeda.
Ingat, tidak ada jaminan untuk urutan fisik sebenarnya dari baris dalam tabel bahkan dengan ORDER BY
di INSERT
, satu-satunya jaminan adalah ID yang dihasilkan.
Dalam sebuah pertanyaan INSERT INTO as SELECT dengan ORDER BY Umachandar Jayachandran dari MS berkata:
Dan dia memberikan tautan ke Pemesanan jaminan di SQL Server , di mana Conor Cunningham dari Tim Mesin SQL Server mengatakan:
Ada tautan ke artikel basis pengetahuan MS di komentar di pos itu:Perilaku fungsi IDENTITY ketika digunakan dengan SELECT INTO atau INSERT .. SELECT query yang berisi klausa ORDER BY , yang menjelaskan lebih detail. Dikatakan:
Saya akan menganggap artikel KB ini sebagai dokumentasi resmi dan menganggap perilaku ini dijamin.