Perilaku identitas fungsi bila digunakan dengan pilih ke atau masukkan. Pilih permintaan yang mengandung ORDER BY klausul

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 273586 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Ketika Anda menggunakan pilih ke query dengan IDENTITAS fungsi dan ORDER BY klausa, identitas nilai-nilai yang dihasilkan tidak dijamin untuk memiliki urutan yang sama seperti urutan yang disediakan oleh ORDER BY klausa. Sebagai contoh, jika IDENTITAS fungsi mulai dengan benih 1 dan kenaikan dari 1, baris pertama dalam set memerintahkan hasilnya bisa memiliki nilai yang berbeda dari 1, dan baris kedua mungkin memiliki nilai yang berbeda dari 2, dan sebagainya.Sementara pemesanan mungkin tampak seperti yang Anda harapkan, perilaku tidak dijamin. Kehadiran atas atau MENGATUR ROWCOUNT juga tidak menjamin urutan baris.

Jika Anda ingin IDENTITAS nilai-nilai akan diberikan dengan cara yang berurutan yang mengikuti memesan di ORDER BY klausa, menciptakan tabel yang berisi kolom dengan IDENTITAS properti dan kemudian jalankan INSERT. PILIH... ORDER BY permintaan untuk mengisi tabel ini.

INFORMASI LEBIH LANJUT

Identitas nilai-nilai yang dihasilkan tergantung pada posisi GetIdentity() fungsi dalam pohon permintaan (showplan), yang dapat berubah karena perubahan optimizer, permintaan paralel rencana atau kehadiran atas/SET ROWCOUNT. Sementara Anda mungkin melihat skenario di mana pilih ke dengan IDENTITAS fungsi dan ORDER BY klausul menghasilkan nilai-nilai dalam urutan yang Anda inginkan perilaku ini tidak dijamin dan dapat berubah tanpa peringatan. Skenario berikut melibatkan Pilih ke pernyataan dan IDENTITAS fungsi.

Mempertimbangkan meja yang bernama OldTable dengan nilai berikut.
Col1      Col2
-------   --------
1         A          
11        F 
7         G          
17        I          
2         Z          

Skenario 1

Dalam skenario ini, pilih ke dalam query menggunakan identitas fungsi dan sebuah ORDER BY klausa.
SELECT	Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO 	NewTable
FROM 	OldTable
Order By Col1
NewTable dapat dimasukkan dengan baris di salah satu dari dua berikut cara.

Metode 1

Col1      Col2       ID
-------   --------   --------
1         A          4
2         Z          2
7         G          5
11        F          3
17        I          1
Anda dapat melihat bahwa nilai identitas SQL Server menghasilkan ini tidak dalam urutan yang sama seperti ORDER BY kolom)Col1) dalam permintaan.

Metode 2

Col1     Col2       ID
-------  --------   -------
1        A          1
2        Z          2
7        G          3
11       F          4
17       I          5
Dalam kasus ini, Anda mungkin memperhatikan bahwa identitas nilai SQL yang Server menghasilkan dalam urutan yang sama seperti ORDER BY kolom ()Col1) dalam permintaan. Namun, ini kebetulan dan tidak dijamin pesanan Anda akan menerima setiap kali menjalankan query.

Skenario 2

Berikut pilih ke dalam query menggunakan fungsi identitas dan ORDER BY klausa, dengan operator atas atau MENGATUR ROWCOUNT pernyataan.
SELECT TOP 3 Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
-atau-
SET ROWCOUNT 3
SELECT Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
NewTable dapat dimasukkan dengan baris di salah satu mungkin tiga berikut cara:

Metode 1

Col1   Col2   ID
-----  -----  -----
1      A      2
2      Z      1
7      G      3
Dalam kasus ini, Anda mungkin melihat bahwa identitas nilai SQL Server menghasilkan adalah tidak dalam urutan yang sama seperti ORDER BY kolom ()Col1) dalam permintaan.

Metode 2

Col1    Col2     ID
------  ------   ------
1       A        1
2       Z        2
7       G        3
Dalam kasus ini, Anda mungkin memperhatikan bahwa identitas nilai SQL yang Server menghasilkan tepat dalam urutan yang sama seperti ORDER BY kolom ()Col1) dalam permintaan. Namun, ini kebetulan dan tidak dijamin pesanan Anda akan menerima setiap kali menjalankan query.

Metode 3

Col1   Col2    ID
------ ------  ------
1      A       4
2      Z       2
7      G       5
Dalam kasus ini, nilai identitas yang SQL Server menghasilkan bukanlah dalam urutan yang sama seperti ORDER BY kolom)Col1) dalam permintaan. Selain itu, data yang dimasukkan tidak memenuhi BENIH dan peningkatan persyaratan yang ditetapkan dalam fungsi identitas dalam permintaan (BENIH = 1, KENAIKAN = 1).

Sebenarnya, IDENTITAS fungsi menghasilkan identitas dengan benar berdasarkan nilai-nilai parameter benih dan kenaikan. Namun, generasi nilai identitas terjadi sebelum baris yang diurutkan berdasarkan ORDER BY klausa. Oleh karena itu, ketika Anda menggunakan operator atas atau MENGATUR ROWCOUNT pernyataan, baris yang dimasukkan ke dalam tabel resultan (NewTable) tampaknya memiliki nilai-nilai salah identitas. Nilai-nilai identitas SQL Server menghasilkan mungkin tidak cocok dengan parameter benih dan kenaikan IDENTITAS fungsi.

Berikut adalah contoh yang melibatkan memasukkan ke dalam memilih dari dengan ORDER BY klausa.

Pertimbangkan sebuah tabel yang bernama OldTable dengan nilai-nilai berikut:
Col1      Col2
-------   --------
1         S          
11        F 
7         G          
17        I
2         z


Berikut ini adalah tabel sasaran yang bernama NewTable (ID adalah identitas kolom)
ID (identity)    Col1     Col2
---------------    -------   ------


Masukkan ke pilih dari query berikut dengan sebuah ORDER BY klausa akan menjamin kolom ID di NewTable dalam urutan yang sama seperti Col1.
INSERT INTO NewTable (Col1, Col2) SELECT Col1, Col2 FROM OldTable ORDER BY Col1 
ID (identity)    Col1     Col2
-------------    ------   ------
1                1         S
2                2         z
3                7         G
4                11        F
5                17        I

Catatan Kolom identitas ID yang dihasilkan untuk memiliki urutan yang sama seperti Col1. Namun, masukkan ke tidak menjamin urutan fisik baik ID atau Col1 dalam NewTable. Untuk mengambil data dalam urutan yang diinginkan, ORDER BY klausul diperlukan seperti yang ditunjukkan oleh mengikuti pernyataan Pilih:
SELECT * from NewTable ORDER BY ID

Properti

ID Artikel: 273586 - Kajian Terakhir: 22 September 2011 - Revisi: 2.0
Berlaku bagi:
  • 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
Kata kunci: 
kbhowto kbinfo kbpending kbmt KB273586 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:273586

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com