Вопрос: Гарантирует ли ORDER BY порядок вставки в таблицу?
Ответ: нет не гарантирует
НО есть маленькая особенность, если таблица содержит поле IDENTITY(!!!)
Если перенос данных делать через
SELECT Col1, Col2, ID=IDENTITY (int, 1, 1)
INTO NewTable
FROM OldTable
Order By Col1
То в разных ситуация может получиться разная картина, и даже так:
Col1 Col2 ID
------- -------- --------
1 A 4
2 Z 2
7 G 5
11 F 3
17 I 1
Если вставку делать в таблицу, которая создана заранее и содержит поле IDENTITY, то вставка:
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
Но это не гарантирует, опять же, физический порядок вставки. Вся особенность в том, что во втором случае значения поля идентити генерятся ДО самой вставки на базе условия ORDER BY.
ЗЫ: Печально, что в BOL это не описано, точнее убого описано и споров в форумах на эту тему нашёл больше, чем рассчитывал.
Ссылки по теме:
http://blogs.msdn.com/b/sqltips/archive/2005/07/20/441053.aspx
http://support.microsoft.com/kb/273586/en-us/
Спасибо Алексею Князеву за предоставленую информацию.
Комментариев нет:
Отправить комментарий