Tương tự câu hỏi đã được hỏi trước đây.
Bạn có thể chỉ định một ORDER BY
trong INSERT
.
Nếu bạn làm điều đó, thứ tự mà IDENTITY
các giá trị được tạo ra được đảm bảo khớp với ORDER BY
được chỉ định trong INSERT
.
Sử dụng ví dụ của bạn:
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;
Kết quả là:
+----+-------+
| ID | Name |
+----+-------+
| 1 | Jonny |
| 2 | Sally |
| 3 | Timmy |
+----+-------+
Đó là, Name
đã được sắp xếp và ID đã được tạo theo thứ tự này. Nó được đảm bảo rằng Jonny sẽ có ID thấp nhất, Timmy sẽ có ID cao nhất, Sally sẽ có ID giữa họ. Có thể có khoảng cách giữa các giá trị ID được tạo, nhưng thứ tự tương đối của chúng được đảm bảo.
Nếu bạn không chỉ định ORDER BY
trong INSERT
, sau đó tạo ra IDENTITY
ID có thể được tạo theo một thứ tự khác.
Xin lưu ý bạn, không có gì đảm bảo cho thứ tự thực tế của các hàng trong bảng ngay cả với ORDER BY
trong INSERT
, đảm bảo duy nhất là các ID được tạo.
Trong câu hỏi CHÈN VÀO là CHỌN với ĐẶT HÀNG THEO Umachandar Jayachandran từ MS cho biết:
Và anh ấy đã đưa một liên kết đến Đặt hàng đảm bảo trong SQL Server , nơi Conor Cunningham từ Nhóm Máy chủ SQL cho biết:
Có một liên kết đến bài viết cơ sở kiến thức MS trong các nhận xét trong bài đăng đó: Hành vi của hàm IDENTITY khi được sử dụng với SELECT INTO hoặc INSERT .. SELECT truy vấn có chứa mệnh đề ORDER BY , giải thích nó chi tiết hơn. Nó nói:
Tôi sẽ coi bài viết KB này như một tài liệu chính thức và coi hành vi này được đảm bảo.