Chování funkce IDENTITY při použití s SELECT INTO nebo INSERT SELECT dotazy obsahující klauzuli ORDER

Překlady článku Překlady článku
ID článku: 273586 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Při použití dotazu SELECT INTO s funkce IDENTITY a klauzuli ORDER identity hodnoty, které jsou generovány zaručeno mít stejném pořadí jako pořadí poskytované klauzuli ORDER by. Například Pokud funkce IDENTITY začíná ohlašovací 1 a přírůstek 1, první řádek v sadě výsledků objednané může mít hodnotu jinou než 1 a druhý řádek může mít hodnotu jinou než 2 a tak forth.While řazení může zobrazit podle očekávání, chování není zaručeno. Přítomnost TOP nebo SET ROWCOUNT také nezaručuje pořadí řádků.

Pokud chcete hodnoty IDENTITY přiřazena sekvenční způsobem, který následuje za řazení v klauzuli ORDER by, vytvořte tabulku obsahující sloupec s vlastností IDENTITY a spustit INSERT SELECT dotazu … order naplnit této tabulky.

Další informace

Hodnoty identity, které jsou generovány závisí na pozici GetIdentity() funkce v dotazu stromu (showplan), které může změnit kvůli změny Optimalizátor plány paralelní dotazu nebo přítomnosti TOP/SET ROWCOUNT. Zatímco se může zobrazit scénáře, ve kterém SELECT INTO s funkce IDENTITY a klauzuli ORDER vracet hodnoty v objednávky druhou toto chování není zaručeno a mohou měnit bez upozornění. Následující scénáře zahrnovat příkaz SELECT INTO a funkce IDENTITY.

Zvažte tabulku s následující hodnoty s názvem OldTable.
Col1      Col2
-------   --------
1         A          
11        F 
7         G          
17        I          
2         Z          

Situace 1

V tomto scénáři používá dotaz SELECT INTO funkce IDENTITY a ORDER klauzuli.
SELECT	Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO 	NewTable
FROM 	OldTable
Order By Col1
Nová_tabulka může být vložen s řádky v jednom z následujících dvou způsobů.

Metoda 1

Col1      Col2       ID
-------   --------   --------
1         A          4
2         Z          2
7         G          5
11        F          3
17        I          1
Můžete si všimnout, že hodnota IDENTITY, které SQL Server generuje není ve stejném pořadí jako sloupec order (Sloupec1) v dotazu.

Metoda 2

Col1     Col2       ID
-------  --------   -------
1        A          1
2        Z          2
7        G          3
11       F          4
17       I          5
V tomto případě můžete všimnout IDENTITY hodnota, že SQL Server generuje v přesně stejném pořadí jako order sloupce (Sloupec1) v dotazu. To je však coincidental a není zaručené objednávky obdržíte při každém spuštění dotazu.

Scénář 2

Následující dotazy SELECT INTO použijte funkci IDENTITY a klauzuli ORDER s TOP operátor nebo příkaz SET ROWCOUNT.
SELECT TOP 3 Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
- nebo -
SET ROWCOUNT 3
SELECT Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
Nová_tabulka může být vložen s řádky v jednom z následujících tří možných způsobů:

Metoda 1

Col1   Col2   ID
-----  -----  -----
1      A      2
2      Z      1
7      G      3
V tomto případě můžete vidět, hodnota IDENTITY, které SQL Server generuje není ve stejném pořadí jako sloupec order (Sloupec1) v dotazu.

Metoda 2

Col1    Col2     ID
------  ------   ------
1       A        1
2       Z        2
7       G        3
V tomto případě můžete všimnout IDENTITY hodnota, že SQL Server generuje je přesně ve stejném pořadí jako order sloupce (Sloupec1) v dotazu. To je však coincidental a není zaručené objednávky obdržíte při každém spuštění dotazu.

Metoda 3

Col1   Col2    ID
------ ------  ------
1      A       4
2      Z       2
7      G       5
V tomto případě hodnota IDENTITY, které SQL Server generuje není ve stejném pořadí jako order sloupec (Sloupec1) v dotazu. Navíc data vložena nesplňuje požadavky na typu SEED a PŘÍRŮSTEK zadanou ve funkci IDENTITY v dotazu (OHLAŠOVACÍ = 1, PŘÍRŮSTEK = 1).

Funkce IDENTITY skutečně, generuje správně na základě parametrů typu SEED a PŘÍRŮSTEK hodnoty identity. Generování hodnota identity však dochází před řádky jsou řazeny na základě klauzule ORDER by. Proto při použití TOP operátor nebo SET ROWCOUNT výkazu, řádky vložené do výsledné tabulky (Nová_tabulka) zdánlivě mají identity nesprávné hodnoty. SQL Server generuje hodnoty identity se nemusí shodovat s parametry typu SEED a PŘÍRŮSTKU IDENTITY funkce.

Zde je příklad zahrnuje INSERT INTO SELECT FROM s klauzulí ORDER by.

Zvažte tabulku nazvanou OldTable s následující hodnoty:
Col1      Col2
-------   --------
1         S          
11        F 
7         G          
17        I
2         z


Níže je cílové tabulky pojmenované Nová_tabulka (ID je sloupec identity)
ID (identity)    Col1     Col2
---------------    -------   ------


Následující INSERT INTO SELECT FROM dotaz s klauzulí ORDER zaručí, že sloupec ID v Nová_tabulka je ve stejném pořadí jako Sloupec1.
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

Poznámka: Sloupec identity ID generováno mají stejné pořadí jako Sloupec1. Však INSERT INTO nemá zaručit fyzické pořadí ID nebo Sloupec1Nová_tabulka. Chcete-li načíst data do požadovaného pořadí, je vyžadován znázorněno pomocí následujícího příkazu SELECT klauzuli ORDER:
SELECT * from NewTable ORDER BY ID

Vlastnosti

ID článku: 273586 - Poslední aktualizace: 2. listopadu 2007 - Revize: 4.2
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbmt kbhowto kbinfo kbpending KB273586 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:273586

Dejte nám zpětnou vazbu

 

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