Поскольку MS SQL Server (как и большинство баз данных) не поддерживает непосредственное изменение типа существующего столбца, вам придется делать это поэтапно. В прошлом я решал подобные проблемы (предполагая, что ваша таблица называется «foo», а столбец - «bar»):
ALTER TABLE foo ADD COLUMN tempbar text;
UPDATE foo SET tempbar = cast(cast(bar as varchar) as text);
ALTER TABLE foo DROP COLUMN bar;
ALTER TABLE foo ADD COLUMN bar text;
UPDATE foo SET bar = tempbar;
ALTER TABLE foo DROP COLUMN tempbar;
(Некоторый синтаксис SQL может быть отключен, прошел год с тех пор, как я в последний раз делал это, на другой работе, поэтому у меня нет доступа к MS SQL Server или источнику. Вам также придется сделать больше, если у вашей колонки есть индекс.)
Переходит к Донни для синтаксиса преобразования.
[Изменить]
Том Х. предложил использовать хранимую процедуру sp_rename для переименования tempbar
в bar
(вместо шагов 4-6). Это решение для MS SQL Server, которое может работать во многих случаях. Описанное мной решение будет работать (с изменениями синтаксиса) для любой базы данных SQL независимо от версии. В моем случае я имел дело с первичными и внешними ключами, а не только с одним полем, поэтому мне пришлось тщательно упорядочить все операции и переносить их на несколько версий MS SQL Server - откровенная работа с моей стороны.