Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Đơn hàng có được đảm bảo khi chèn nhiều hàng có danh tính không?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thay đổi tên cột khi sử dụng PIVOT SQL Server 2008

  2. Ai đó có thể giải thích DBCC DROPCLEANBUFFERS không?

  3. SQL - Thủ tục lưu trữ cuộc gọi cho mỗi bản ghi

  4. Làm cách nào để thay đổi kích thước trang của SQL Server?

  5. SQL server 2008 vấn đề nhiều LIKE