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

Как изменить столбец, не отбрасывая таблицу в SQL 2008

Почему SQL 2008 вдруг хочет отбросить мои таблицы, когда я перехожу, чтобы изменить тип столбца от say int до реального? Насколько мне известно, этого никогда не было в SQL 2005. Любое понимание было бы полезно, пожалуйста.

4b9b3361

Ответ 1

В SQL Server 2008 перейдите в раздел "Инструменты → Параметры". В маленьком окне нажмите "Дизайнер". Снимите флажок "Запретить сохранение изменений, требующих..."

=====

Отредактировано 4 сентября 2015 г.

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

Ответ 2

Не могу поверить, что главный ответ сидит здесь так долго - это очень опасный совет!

Есть несколько операций, которые вы можете выполнять на месте, не отбрасывая таблицу:

Если вы столкнулись с ситуацией, когда изменение столбца невозможно, не отбрасывая таблицу, вы обычно можете использовать запрос 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 
    
  • Удалить столбец
  • Вставьте новый столбец с тем же именем, что и удаленный столбец, и тип, который вы хотите
  • Вставьте сохраненные данные в этот столбец