Подтвердить что ты не робот

Выбор SQL Server * Копирование столбцов

Как SQL Server определяет порядок столбцов, когда вы выполняете SELECT *?

Я знаю, что "Order By" необходим для упорядочивания данных, но я ожидал, что имена столбцов будут согласованы.

Примечание. Мой код не зависит от фактического порядка возврата столбцов. Я просто хочу знать, как SQL Server решает упорядочить имена столбцов.

Около 20 компьютеров, которые использует моя команда, одна из них ведет себя по-разному. Любая разница заслуживает изучения. При открытии SQL Server Management Studio упорядочение имен столбцов одинаково для всех компьютеров. Когда наше приложение делает запрос, я вижу разницу.

Я использую SQL Server 2008 и SQL Server 2008 R2. Мое приложение использует С# System.Data.SqlClient для доступа к базе данных.

EDIT: Моя проблема оказалась в том, что один из компьютеров был настроен для входа в систему как "sa", а не для предполагаемого пользователя. Запрос сразу попадал в таблицу, когда мы намеревались нанести удар по представлению. Спасибо за помощь, узнав о sys.columns

4b9b3361

Ответ 1

Они находятся в порядке column_id из системного представления sys.columns.

Вы можете проверить это:

SELECT column_id, name
FROM sys.columns
WHERE object_id = Object_id('MyTableName')
ORDER BY column_id

ИЗМЕНИТЬ

Это для Дем. Вы должны протестировать большую таблицу, но похоже, что она использует порядок, определенный в таблице, а не индекс:

CREATE TABLE #T (cola int, colb int, colc int)

INSERT INTO #T
VALUES
(1,2,3),
(2,3,4),
(4,5,6)

SELECT * FROM #T

CREATE INDEX ix_test ON #T (colb, colc, cola)

SELECT * FROM #t
WHERE colb > 0

DROP TABLE #T

Ответ 2

Они будут того же порядка, в котором они появятся в Sql Server Management Studio; по существу, порядок, в котором они были созданы.

"Правильное" решение для обеспечения желаемого порядка столбцов - это явно указать поля в инструкции SELECT. SELECT * не дает никаких гарантий относительно упорядочения выходных столбцов.