Почему я не могу изменить порядок столбцов SQL Server?

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

Но SQL Server Management Studio не позволяла мне это делать. Я понимаю, что я не могу этого сделать, и этот порядок столбцов почти не имеет отношения к SQL.

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

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

Ответ 1

Вам могут быть интересны ответы на этот вопрос.

Что касается того, почему вы не можете переупорядочивать столбцы (кроме опубликованных ответов SSMS-ответов), я не уверен, что вы найдете канонический ответ, за исключением SQL-стандарта, который не содержит программного синтаксиса для этого - единственный способ переопределить схему таблицы (включая порядок ее столбцов) - это отказаться от таблицы и воссоздать ее. Таким образом, любое приложение управления, которое обеспечивает переупорядочение столбцов, скорее всего, будет делать это за кулисами (например, SSMS Design View, как указано в связанном вопросе).

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

Ответ 2

Определенно вы можете. Снимите этот флажок в SQL Server Management Studio:
Инструменты > Параметры > Дизайнеры > Предотвратите сохранение изменений, требующих рекреации стола.

Диалог параметров

Ответ 3

Переупорядочивающие столбцы в основном такие же, как переработка таблицы, что является обходным путем, если изменения, требующие отдыха, отключены:

SELECT (fields in DESIRED order)
INTO MyNewTable
FROM OldTable

Ответ 4

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

Откройте SQL Management Studio и воспользуйтесь меню, чтобы перейти в Инструменты- > Параметры

В меню параметров слева выберите "Дизайнеры"

В панели "Параметры таблицы" справа убедитесь, что флажок рядом с параметром "Предотвратить сохранение изменений, требующих повторного создания таблицы", не установлен.

После того, как вы подтвердите, что это сделано, попробуйте переупорядочить ваши столбцы еще раз.

Ответ 5

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

Отбрасывание столбца основано на имени столбца, а не на порядковой позиции (столбец "первая/вторая/третья/и т.д." ). Добавление столбца всегда добавляется в конец списка столбцов. Это подтверждает, что последовательность столбцов совершенно не имеет отношения к данным, кроме SQL-операций. Я не знаю, как вы считаете себя похожим...

Нет баз данных SQL. Я знаю, что поддержка вставляет столбцы в определенном порядке в существующую таблицу. PHPMyAdmin предоставил функциональность, но под обложками функция создает новую таблицу с нужным порядком столбцов, копируя данные из старой в новую таблицу и, наконец, удаляя/удаляя старую таблицу.

Порядок столбцов не дает преимуществ для операций...

Ответ 6

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