SELECT INTO veya INSERT ile kullanıldığında IDENTITY işlevin davranışı ORDER BY yan tümcesi içeren bir SELECT sorgularını

Makale çevirileri Makale çevirileri
Makale numarası: 273586 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

IDENTITY işlevi ve ORDER BY yan tümcesi bir SELECT INTO sorgu kullandığınızda oluşturulan kimlik değerlerini ORDER BY yan tümcesi tarafından sağlanan sıra aynı sırada olmasını garanti edilmez. Örneğin, IDENTITY işlevi, bir tohum 1 ve 1'in bir artış ile başlatılırsa, sipariş edilen sonuç kümesindeki ilk satır 1'den farklı bir değer olabilir ve ikinci satır, %2 değerinden farklı bir değer olabilir ve beklediğiniz gibi forth.While sipariş görünebilir; böylece davranışı garanti edilmeyen. TOP veya SET ROWCOUNT sipariş satırları da garanti etmez.

IDENTITY değerleri, ORDER BY yan tümcesinde sipariş izleyen sıralı biçimde atanmasını isterseniz, bir sütunu içeren bir KIMLIK özelliği ve ıNSERT'ı çalıştırmak için geçerli bir tablo oluşturun... Bu tablo doldurmak için … ORDER BY sorgusu SELECT.

Daha fazla bilgi

Oluşturulan kimlik değerlerini GetIdentity() işlevi konumunu en iyi duruma getiricisi değişiklikleri nedeniyle, paralel sorgu planları veya TOP/SET ROWCOUNT varlığını değişebilir sorgu ağacında (showplan) bağlıdır. Senaryolarda, bir SELECT INTO bir IDENTITY işlevi ve ORDER BY yan tümcesi oluşturmak değerleri görebileceğiniz Bu davranış istediğiniz sipariş garanti edilmeyen ve hiçbir uyarıda bulunulmadan değişebilir. Aşağıdaki senaryolarda, bir SELECT INTO deyimi ve bir IDENTITY işlevi içerir.

Aşağıdaki değerleri ile birlikte OldTable adlı bir tablo olarak düşünün.
Col1      Col2
-------   --------
1         A          
11        F 
7         G          
17        I          
2         Z          

Senaryo 1

Bu senaryoda, SELECT INTO sorgu bir IDENTITY işlevi ve bir ORDER BY yan tümcesi. kullanan
SELECT	Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO 	NewTable
FROM 	OldTable
Order By Col1
yenitablo aşağıdakilerden satır ile iki yolla eklenmesi.

Yöntem 1

Col1      Col2       ID
-------   --------   --------
1         A          4
2         Z          2
7         G          5
11        F          3
17        I          1
SQL Server'ı oluşturan KIMLIK değerini sütun olarak ORDER BY (Sütun1) aynı sırada sorguda olduğunu fark edebilirsiniz.

Yöntem 2

Col1     Col2       ID
-------  --------   -------
1        A          1
2        Z          2
7        G          3
11       F          4
17       I          5
Bu durumda KIMLIK değeri, SQL farkedebilirsiniz Server oluşturur ORDER BY sütunu (Sütun1) sorgudaki tam olarak aynı sırasına göredir. Ancak bu coincidental ve sorgu işlemini her çalıştırdığınızda alırsınız garantili sırası değildir.

Senaryo 2

TOP bir işleç veya bir SET ROWCOUNT ekstresi. aşağıdaki SELECT INTO sorgular IDENTITY işlevi ve ORDER BY yan tümcesi, kullanın
SELECT TOP 3 Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
- veya -
SET ROWCOUNT 3
SELECT Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
yenitablo ile aşağıdakilerden biri bir satırda üç olası yolları eklenmesi:

Yöntem 1

Col1   Col2   ID
-----  -----  -----
1      A      2
2      Z      1
7      G      3
Bu durumda, SQL Server'ı oluşturan KIMLIK değerini sütun olarak ORDER BY (Sütun1) aynı sırada sorguda olmadığını görebilirsiniz.

Yöntem 2

Col1    Col2     ID
------  ------   ------
1       A        1
2       Z        2
7       G        3
Bu durumda KIMLIK değeri, SQL farkedebilirsiniz Server oluşturur ORDER BY sütunu (Sütun1) sorgudaki tam olarak aynı sırasına göredir. Ancak bu coincidental ve sorgu işlemini her çalıştırdığınızda alırsınız garantili sırası değildir.

Yöntem 3

Col1   Col2    ID
------ ------  ------
1      A       4
2      Z       2
7      G       5
Bu durumda, SQL Server'ı oluşturan KIMLIK değerini ORDER BY sütununda (Sütun1) sorgu aynı sırada değil. Ayrıca, eklenen veri IDENTITY işlevi sorguda belirtilen BAŞLANGıÇ ve ARTıŞ gereksinimlerini karşılamıyor (ÇEKIRDEK = 1, ARTıRMA = 1).

Aslında, IDENTITY işlevi doğru BAŞLANGıÇ ve ARTıŞ parametreleri temel alarak, kimlik değerleri oluşturur. Önce satırları ORDER BY yan tümcesi göre sıralanır, ancak kimlik değeri üretilmesine oluşur. Bu nedenle, bir TOP işletmen veya bir SET ROWCOUNT kullandığınızda deyimi, sonuç tablosunda (yenitablo) eklenen satır gibi yanlış kimlik değerlerine sahip. SQL Server'ı oluşturur kimlik değerlerini, ÇEKIRDEK ve ARTıM parametreleri IDENTITY işlevinin eşleşmeyebilir.

Bir INSERT INTO SELECT FROM ORDER BY yan tümcesi ile ilgili bir örnek aşağıdadır.

Aşağıdaki değerleri ile birlikte OldTable adlı bir tablo göz önünde bulundurun:
Col1      Col2
-------   --------
1         S          
11        F 
7         G          
17        I
2         z


Aşağıda, hedef tablonun yenitablo adlı (KIMLIĞI, kimlik sütunu olan)
ID (identity)    Col1     Col2
---------------    -------   ------


ORDER BY yan tümcesi ile birlikte aşağıdaki INSERT INTO SELECT FROM sorgu KIMLIĞI yenitabloSütun1 aynı sırada olduğundan bu sütun garanti.
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

Not KIMLIĞI, kimlik sütunu Sütun1 olarak aynı sırası için oluşturulur. Ancak, INSERT INTO KIMLIĞI'ni veya Sütun1yenitablo içinde fiziksel sırasını garanti doesn’t. Istenen sırada veri almak için <a0></a0>, ORDER BY yan tümcesi SELECT deyimi aşağıdaki gibi gereklidir:
SELECT * from NewTable ORDER BY ID

Özellikler

Makale numarası: 273586 - Last Review: 2 Kasım 2007 Cuma - Gözden geçirme: 4.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Standard Edition
Anahtar Kelimeler: 
kbmt kbhowto kbinfo kbpending KB273586 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:273586

Geri Bildirim Ver

 

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