Как изменить порядок столбцов существующей таблицы в SQL Server 2008

У меня есть ситуация, когда мне нужно изменить порядок столбцов/добавление новых столбцов для существующей таблицы в SQL Server 2008.

Существующий столбец

MemberName
MemberAddress
Member_ID(pk)

и я хочу этот порядок

Member_ID(pk)
MemberName
MemberAddress

Ответ 1

Я получил ответ за то же самое, Продолжайте sql server -->Tools-->Option--> designer-->Table and database Designers и unselect prevent saving changes that require table-re creation

enter image description here

2- Откройте представление таблицы таблиц и прокрутите столбец вверх и вниз и сохраните изменения.

enter image description here

Ответ 2

Это невозможно при выполнении инструкции ALTER. Если вы хотите иметь столбцы в определенном порядке, вам нужно будет создать новую таблицу, используйте INSERT INTO newtable (col-x, col-a, col-b) SELECT col-x, col-a, col-b FROM oldtable для переноса данных из таблицы oldtable в новую таблицу, удаления oldtable и переименования новой таблицы в имя oldtable.

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

Ответ 3

Если в вашей таблице нет записей, которые вы можете просто удалить, создайте таблицу.

Если у него есть записи, вы можете сделать это, используя свою SQL Server Management Studio.

Просто нажмите на таблицу > щелкните правой кнопкой мыши > щелкните "Дизайн", затем вы можете упорядочить порядок столбцов, перетащив поля в том порядке, который вы хотите, затем нажмите "Сохранить".

С наилучшими пожеланиями

Ответ 4

Опираясь на порядок столбцов, как правило, это плохая идея в SQL. SQL основан на теории реляций, где порядок никогда не гарантируется - по дизайну. Вы должны обрабатывать все ваши столбцы и строки как не имеющие порядка, а затем изменять свои запросы, чтобы обеспечить правильные результаты:

Для столбцов:

  • Попробуйте не использовать SELECT *, но вместо этого укажите порядок столбцов в списке выбора, как в: SELECT Member_ID, MemberName, MemberAddress из TableName. Это гарантирует заказ и облегчит обслуживание, если столбцы будут добавлены.

Для строк:

  • Порядок строк в вашем результирующем наборе гарантируется только при указании предложения ORDER BY.
  • Если не указано условие ORDER BY, результирующий набор может отличаться по мере того, как может быть изменен план запроса или могут измениться страницы базы данных.

Надеюсь, что это поможет...

Ответ 5

Я попробовал это и не вижу никакого способа сделать это.

вот мой подход к этому.

  • Щелкните правой кнопкой мыши на таблице и Script таблицу для создания и сделайте это на одно из окна SQL Query,
  • EXEC sp_rename 'Employee', 'Employee1' - Имя исходной таблицы - Employee
  • Запустите Employee create script, убедитесь, что вы упорядочиваете столбцы так, как вам нужно.
  • INSERT INTO TABLE2 SELECT * FROM TABLE1. - Вставить в Employee выберите Name, Company from Employee1
  • DROP table Employee1.

Ответ 6

Это может быть проблемой при использовании Source Control и автоматических развертываний в общей среде разработки. Там, где я работаю, мы имеем очень большую выборку DB на нашем уровне разработки для работы (подмножество наших производственных данных).

Недавно я сделал некоторую работу, чтобы удалить один столбец из таблицы, а затем добавить некоторые дополнительные в конце. Затем мне пришлось отменить удаление столбцов, поэтому я снова добавил его в конец, что означает, что таблица и все ссылки верны в среде, но автоматическое развертывание Source Control больше не работает, потому что оно жалуется на изменение определения таблицы.

Реальная проблема здесь в том, что таблица + индексы составляют ~ 120 ГБ, а среда имеет только ~ 60 ГБ, поэтому мне нужно либо:

a) Переименуйте существующие столбцы, которые находятся в неправильном порядке, добавьте новые столбцы в правильном порядке, обновите данные, затем удалите старые столбцы

ИЛИ

b) Переименуйте таблицу, создайте новую таблицу с правильным порядком, вставьте в новую таблицу из старого и удалите из старого, когда я иду по

Параметр сравнения SSMS/TFS с использованием таблицы temp не будет работать, потому что на диске недостаточно места для этого.

Я не пытаюсь сказать, что это лучший способ сделать что-то или что порядок столбцов действительно имеет значение, просто у меня есть сценарий, где это проблема, и я делюсь теми вариантами, о которых я думал исправить проблему

Ответ 7

SQL-запрос для первого изменения столбца идентификатора:

ALTER TABLE `student` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT FIRST;

или используя:

ALTER TABLE `student` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT AFTER 'column_name'