Выбор 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
Ответы
Ответ 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 *
не дает никаких гарантий относительно упорядочения выходных столбцов.