Когда недостаточно ALTER TABLE

Когда недостаточно ALTER TABLE

Иногда бывает нужным произвести изменение столбца, которое нельзя совершить с помощью ALTER TABLE. Примером может быть случай, когда столбец, хранящий международные элементы языка, имеет набор символов NONE, который нужно заменить на другой набор символов, чтобы исправить ошибку проектирования, или телефонный номер, определенный вначале кем-то как целое, нужно заменить на 18-символьный столбец.

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

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

1. Добавьте в таблицу временный столбец с теми атрибутами, которые вам нужны.

ALTER TABLE PERSONNEL

ADD TEMP_COL VARCHAR (18) ;

COMMIT;

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

UPDATE PERSONNEL

SET TEMP_COL = CAST(TEL_NUMBER AS VARCHAR(18))

WHERE TEL_NUMBER IS NOT NULL;

COMMIT;

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

ALTER TABLE PERSONNEL DROP TEL_NUMBER;

4. Создайте "новый" столбец, с тем же именем, как и тот, который вы только что удалили, и с теми же атрибутами, что и у временного столбца.

ALTER TABLE PERSONNEL

ADD TEL_NUMBER VARCHAR (18);

5. Скопируйте данные во вновь созданный столбец.

UPDATE PERSONNEL

SET TEL_NOMBER = TEMP_COL WHERE TEMP_COL IS NOT NULL;

COMMIT;

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

ALTER TABLE PERSONNEL

DROP COLUMN TEMP_COL,

ALTER TEL_NUMBER POSITION 6;

COMMIT;

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Создание таблиц:

Из книги автора

Создание таблиц: <fo:table> Как можно догадаться из названия, элемент <fo:table> применяется для создания новой таблицы. Сама таблица состоит из необязательного заголовка, необязательного подстрочного примечания и одного или более тел таблицы (table body). Таблица из ячеек,


3.23. Как отключить сообщение о том что недостаточно свободного места на диске?

Из книги автора

3.23. Как отключить сообщение о том что недостаточно свободного места на диске? Создайте в реестре, по пути HKEY_CURRENT_USER Software Microsoft Windows CurrentVersion Policies Explоrer Ключ типа DWORD под названием NoLowDiskSpaceChecks, и присвойте ему значение 1.


Недостаточно места на диске

Из книги автора

Недостаточно места на диске Если Windows постоянно выводит сообщения о том, что на диске мало места, то в разделе реестраHKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplоrer создайте параметр NoLowDiskSpaceChecks типа DWORD со значением, равным 1, – и windows заткнется :-)


Какой метод интернет-рекламы выбрать, если денег недостаточно

Из книги автора

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


Модификация структуры таблицы с помощью предложения ALTER

Из книги автора

Модификация структуры таблицы с помощью предложения ALTER С помощью предложения ALTER можно изменить определения полей в таблице. Например, чтобы добавить поле CustomerType в tblCustomer, используйте приведенную ниже команду SQL.ALTER TABLE tblCustomer ADD CustomerType intДля того чтобы удалить поле из базы


7.1. Синтаксис ALTER VIEW

Из книги автора

7.1. Синтаксис ALTER VIEW ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}][DEFINER = {user | CURRENT_USER}][SQL SECURITY {DEFINER | INVOKER}]VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]Эта инструкция изменяет определение существующего view. Синтаксис для CREATE VIEW подобен этому. Эта инструкция требует привилегий CREATE VIEW и DROP для


Подготовка к выполнению ALTER TABLE

Из книги автора

Подготовка к выполнению ALTER TABLE Перед модификацией или удалением столбцов или атрибутов в таблице вам нужно выполнить три дела:1. Убедитесь, что вы имеете соответствующие привилегии к базе данных.2. Сохраните существующие данные.3. Удалите любые ограничения зависимостей в


DROP TABLE

Из книги автора

DROP TABLE Используйте оператор DROP TABLE для удаления таблицы и ее данных из базы данных.Это полное удаление, оно не может быть отменено после подтверждения транзакции.DROP TABLE имя;Следующий оператор удаляет таблицу PERSONNEL:DROP TABLE


RECREATE TABLE

Из книги автора

RECREATE TABLE Иногда бывает нужно удалить таблицу и снова создать ее "с нуля". Для таких случаев Firebird имеет оператор RECREATE TABLE, который делает следующее:* удаляет существующую таблицу и все принадлежащие ей объекты;* подтверждает изменения;* создает новую таблицу в соответствии с


10. Когда открыть, а когда закрыть

Из книги автора

10. Когда открыть, а когда закрыть Рассмотрев деловые модели, которые поддерживают разработку программного обеспечения с открытыми текстами, мы можем теперь приблизиться к общему вопросу о том, когда исходному коду, с точки зрения экономики, имеет смысл быть «открытым», а


Денис Якушев, Taberna: формат OpenSource для рынка СНГ пока развит недостаточно Елена Краузова

Из книги автора

Денис Якушев, Taberna: формат OpenSource для рынка СНГ пока развит недостаточно Елена Краузова Опубликовано 27 мая 2013 По информации Data Insght, за ушедший год объём российского рынка e-commerce прошёл отметку в 400 млрд. рублей. На такую сумму приобрели товары


Случаи, когда инструментальных средств недостаточно

Из книги автора

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