Почему SQL 2008 вдруг хочет отбросить мои таблицы, когда я перехожу, чтобы изменить тип столбца от say int до реального? Насколько мне известно, этого никогда не было в SQL 2005. Любое понимание было бы полезно, пожалуйста.
Как изменить столбец, не отбрасывая таблицу в SQL 2008
Ответ 1
В SQL Server 2008 перейдите в раздел "Инструменты → Параметры". В маленьком окне нажмите "Дизайнер". Снимите флажок "Запретить сохранение изменений, требующих..."
=====
Отредактировано 4 сентября 2015 г.
Я добавил этот ответ здесь долго, давным-давно, описывая способ решения ситуации, описанной выше. С тех пор пользователи из нижеприведенных нитей выставили несколько проблем в отношении того, как я рекомендовал в то время. В принципе, решение, которое я описал, может быть проблематичным в некоторых сценариях. Затем я предлагаю вам продолжить чтение, чтобы проверить комментарии других пользователей и выбрать наилучшее решение для вас.
Ответ 2
Не могу поверить, что главный ответ сидит здесь так долго - это очень опасный совет!
Есть несколько операций, которые вы можете выполнять на месте, не отбрасывая таблицу:
- Разверните столбец varchar https://dba.stackexchange.com/questions/5211/changing-column-width
- Сделать столбец нулевым (но не наоборот)
- Переименование столбцов с помощью sp_rename
Если вы столкнулись с ситуацией, когда изменение столбца невозможно, не отбрасывая таблицу, вы обычно можете использовать запрос SELECT INTO
для проектирования своих данных в новую таблицу, а затем отказаться от старой таблицы (временно отключая ограничения) а затем переименовать проецируемую таблицу. В этом случае вам нужно будет отключить свою базу данных в автономном режиме.
Ответ 3
Вот что я использую:
-- Add new column
ALTER TABLE MyTable
ADD Description2 VARCHAR(MAX)
GO
-- Copy data to new column (probably with modifications)
Update MyTable
SET Description2 = Description
GO
-- Drop old column
ALTER TABLE MyTable
DROP COLUMN Description
GO
-- Rename new column to the original column name.
sp_RENAME 'MyTable.Description2' , 'Description', 'COLUMN'
GO
- Скопируйте данные в новый столбец.
- Отбросьте старый столбец.
- Переименуйте новый столбец в имя старого столбца.
Ответ 4
У меня такая же проблема. Хотя моя учетная запись имеет права sa, если я пытаюсь использовать другую учетную запись sa, она работает. Кажется, что как-то моя учетная запись не имеет возможности изменить. все еще исследуя, но это проблема разрешения.
обновление:
Я не могу его использовать. но это то, что я сделал. там были две группы доменов, к которым принадлежала моя учетная запись. Одна из них - новая группа доменных имен AD, а другая - группа доменов доменного имени NT. Как только я удалил устаревшую группу домена, я смог успешно изменить таблицу. Имейте в виду, что у вас обе группы были "sa" priviliges.
Поведение состояло в том, что команды alter приведут к успеху, но ничего не изменилось в таблице. Затем, когда я вручную попытался изменить поля через конструктор, он жаловался, что мне не разрешили внести изменения, если ему нужно было сбросить и воссоздать таблицу. Я нашел настройку в инструментах, и я смог отключить это. Но эта таблица огромна и не очень хорошая идея. Я буду советовать другим против этого.
так что это была проблема разрешения. Я не могу объяснить, как, но я надеюсь, что это поможет кому-то еще.
Ответ 5
Другим способом этого без полного удаления таблицы является
- Сделайте резервную копию значений столбца.
-
Сделать столбец нулевым, если он еще не разрешает null. Установите значения столбца равными нулю на делая
update tablename set columnname = null
- Удалить столбец
- Вставьте новый столбец с тем же именем, что и удаленный столбец, и тип, который вы хотите
- Вставьте сохраненные данные в этот столбец