Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Hành vi của các chức năng nhận dạng khi sử dụng với chọn vào hoặc CHÈN. CHỌN truy vấn có chứa một lệnh bằng mệnh đề

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:273586
Bài viết này đã được lưu trữ. Bài viết được cung cấp "nguyên trạng" và sẽ không còn được cập nhật nữa.
TÓM TẮT
Khi bạn sử dụng một chọn vào truy vấn với các DANH TÍNH chức năng và một trật tự của mệnh đề, các giá trị danh tính được tạo ra không được bảo đảm để có theo thứ tự theo thứ tự được cung cấp bởi đặt hàng của khoản này. Ví dụ, nếu các DANH TÍNH chức năng bắt đầu với một hạt giống số 1 và gia số 1, hàng đầu trong thiết lập ra lệnh cho kết quả có thể có một giá trị khác nhau hơn 1, và hàng thứ hai có thể có một giá trị khác nhau hơn 2, và vv.Trong khi các đặt hàng có thể xuất hiện như bạn mong đợi, hành vi không được bảo đảm. Sự hiện diện của TOP hoặc SET ROWCOUNT cũng không bảo đảm trật tự của các hàng.

Nếu bạn muốn các DANH TÍNH các giá trị để được chỉ định trong một thời trang tuần tự theo thứ tự tại khoản tự do này, tạo ra một bảng có chứa một cột với các DANH TÍNH bất động sản và sau đó chạy một CHÈN... CHỌN... Thứ tự bởi query cư bảng này.
THÔNG TIN THÊM
Các giá trị danh tính được tạo ra phụ thuộc vào vị trí của các GetIdentity() chức năng trong truy vấn cây (showplan), có thể thay đổi do để tối ưu hóa thay đổi, kế hoạch truy vấn song song hay sự hiện diện của TOP/SET ROWCOUNT. Trong khi bạn có thể xem tình huống trong đó một chọn vào với một DANH TÍNH chức năng và một trật tự do khoản sản xuất các giá trị trong một đơn đặt hàng mà bạn mong muốn hành vi này không đảm bảo và có thể thay đổi mà không có cảnh báo. Các kịch bản sau đây liên quan đến một CHỌN thành tuyên bố và một DANH TÍNH chức năng.

Xem xét một bảng mà được đặt tên theo OldTable với các giá trị sau đây.
Col1      Col2-------   --------1         A          11        F 7         G          17        I          2         Z          

Kịch bản 1

Trong trường hợp này, các truy vấn chọn vào sử dụng một chức năng nhận dạng và một trật tự của khoản này.
SELECT	Col1, Col2, ID=IDENTITY (int, 1, 1)INTO 	NewTableFROM 	OldTableOrder By Col1
NewTable có thể được chèn vào với các hàng trong một trong hai sau cách.

Phương pháp 1

Col1      Col2       ID-------   --------   --------1         A          42         Z          27         G          511        F          317        I          1
Bạn có thể nhận thấy rằng giá trị danh tính rằng máy chủ SQL tạo ra không phải là theo thứ tự như đơn đặt hàng của cột)Col1) trong truy vấn.

Phương pháp 2

Col1     Col2       ID-------  --------   -------1        A          12        Z          27        G          311       F          417       I          5
Trong trường hợp này, bạn có thể nhận thấy rằng danh tính giá trị đó SQL Máy chủ tạo ra là chính xác theo thứ tự như đơn đặt hàng của cột ()Col1) trong truy vấn. Tuy nhiên, điều này là do sự ngâu hợp và không phải các bảo đảm trật tự, bạn sẽ nhận được mỗi khi truy vấn được điều hành.

Kịch bản 2

Các sau chọn vào truy vấn sử dụng chức năng nhận dạng và một Thứ tự của khoản, với một nhà điều hành hàng đầu hoặc một tuyên bố SET ROWCOUNT.
SELECT TOP 3 Col1, Col2, ID=IDENTITY (int, 1, 1)INTO NewTableFROM OldTableOrder By Col1
- hay -
SET ROWCOUNT 3SELECT Col1, Col2, ID=IDENTITY (int, 1, 1)INTO NewTableFROM OldTableOrder By Col1
NewTable có thể được chèn vào với các hàng trong một trong ba tốt sau cách:

Phương pháp 1

Col1   Col2   ID-----  -----  -----1      A      22      Z      17      G      3
Trong trường hợp này, bạn có thể thấy rằng danh tính giá trị đó SQL Server tạo ra không phải là theo thứ tự như đơn đặt hàng của cột ()Col1) trong truy vấn.

Phương pháp 2

Col1    Col2     ID------  ------   ------1       A        12       Z        27       G        3
Trong trường hợp này, bạn có thể nhận thấy rằng danh tính giá trị đó SQL Máy chủ tạo ra là chính xác trong theo thứ tự như đơn đặt hàng của cột ()Col1) trong truy vấn. Tuy nhiên, điều này là do sự ngâu hợp và không phải các bảo đảm trật tự, bạn sẽ nhận được mỗi khi truy vấn được điều hành.

Phương pháp 3

Col1   Col2    ID------ ------  ------1      A       42      Z       27      G       5
Trong trường hợp này, giá trị danh tính SQL Server tạo ra không phải theo thứ tự như đơn đặt hàng của cột)Col1) trong truy vấn. Ngoài ra, các dữ liệu được đưa vào không đáp ứng các Hạt giống và tăng các yêu cầu quy định tại các chức năng nhận dạng trong truy vấn (HẠT GIỐNG = 1, TĂNG = 1).

Trên thực tế, các DANH TÍNH chức năng tạo ra danh tính giá trị đúng dựa trên các hạt giống và tăng tham số. Tuy nhiên, thế hệ giá trị danh tính xảy ra trước khi các hàng được sắp xếp dựa trên các Thứ tự của khoản này. Vì vậy, khi bạn sử dụng một nhà điều hành hàng đầu hoặc một ROWCOUNT SET tuyên bố, các hàng lắp vào kết quả bảng)NewTable) dường như có giá trị không chính xác nhận dạng. Các giá trị danh tính SQL Máy chủ tạo ra có thể không phù hợp với các tham số hạt giống và tăng của các DANH TÍNH chức năng.

Đây là một ví dụ liên quan đến một CHÈN vào chọn từ với thứ tự của khoản này.

Xem xét một bảng được đặt tên OldTable với các giá trị sau:
Col1      Col2-------   --------1         S          11        F 7         G          17        I2         z


Dưới đây là bảng mục tiêu đặt tên NewTable (ID là một cột danh tính)
ID (identity)    Col1     Col2---------------    -------   ------


Truy CHÈN vào chọn từ vấn sau đây với một đơn đặt hàng của khoản sẽ đảm bảo rằng cột ID trong NewTable là theo thứ tự như Col1.
INSERT INTO NewTable (Col1, Col2) SELECT Col1, Col2 FROM OldTable ORDER BY Col1 
ID (identity)    Col1     Col2-------------    ------   ------1                1         S2                2         z3                7         G4                11        F5                17        I

Chú ý ID bản sắc cột được tạo ra để có theo thứ tự như của Col1. Tuy nhiên, CHÈN vào không đảm bảo trật tự vật lý của một trong hai ID hoặc Col1 trong NewTable. Truy xuất dữ liệu theo thứ tự mong muốn, một trật tự của khoản là cần thiết như được hiển thị bằng cách làm theo tuyên bố chọn:
SELECT * from NewTable ORDER BY ID
@@ nhận dạng danh tính sql thứ tự sắp xếp chọn chèn

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 273586 - Xem lại Lần cuối: 12/05/2015 21:44:33 - Bản sửa đổi: 2.0

Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbhowto kbinfo kbpending kbmt KB273586 KbMtvi
Phản hồi