TSQL проверяет порядок сортировки / UNION ALL
CREATE PROCEDURE Test
AS
BEGIN
SELECT * FROM (
SELECT 1 AS a,'test1' as b, 'query1' as c
UNION ALL
SELECT 2 AS a,'test22' as b, 'query22' as c
UNION ALL
SELECT 2 AS a,'test2' as b, 'query2' as c
UNION ALL
SELECT 3 AS a,'test3' as b, 'query3' as c
UNION ALL
SELECT 4 AS a,'test4' as b, 'query4' as c
) As sample
FOR XML RAW
END
Можем ли мы гарантировать, что хранимая процедура возвращает результаты в указанном порядке?
Обычно он говорит, что когда мы вставляем запрос на выборку во временную таблицу, мы не можем гарантировать его порядок вставки. Таким образом, мы должны использовать порядок за пунктом. Но большую часть времени это дает тот же порядок. Можем ли мы заставить его отдать другой порядок? Связано ли это с кластерными и некластеризованными индексами.
Во втором случае, можем ли мы установить порядок вставки, добавив столбец Identity?
1 ответ
Когда вы вставляете данные, SQL обращается к ним как к набору. Даже при записи данных на диск он пытается занять минимальное пространство и начинает вставлять строки в свободные страницы, которые он сначала находит в неоднородных экстентах. Таким образом, когда вы запрашиваете данные, результат зависит от порядка информации, находящейся в кассе, и порядка информации, считываемой с жесткого диска. Я думаю, что почти невозможно предсказать, что заказы, поскольку это зависит от работы ОС, других программ и так далее.