SQL Server изменить имя поля - PullRequest
1 голос
/ 03 декабря 2010

У меня проблема с изменением поля базы данных с datetime на integer со значениями с использованием SQL Server 2005

Мой код ...

alter table overtime alter column adate numeric(5)

при использовании этого запроса я получаю ошибку, подобную этой

Запрещено неявное преобразование из тип данных datetime к типу данных числовой, табличный «DaiichiPayroll.dbo.Overtime», столбец 'свидание'. Используйте функцию CONVERT для запустите этот запрос.

Какие-нибудь решения?

Ответы [ 2 ]

6 голосов
/ 03 декабря 2010

Сервер не может неявно преобразовать ваш столбец dateTime в числовой.Одно из решений -

  1. создать новый столбец числового типа
  2. , преобразовать данные из столбца dateTime в числовой столбец, написав дополнительный запрос, а затем
  3. удалить столбец dateTime
  4. Переименовать этот вновь добавленный столбец в тот же столбец, что и удаленный dateTime.
2 голосов
/ 03 декабря 2010

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

Дляпо этой причине было бы неплохо, если бы был какой-то явный синтаксис convert, который можно было бы запустить, например, чтобы заменить 8-байтовый datetime столбец на 8-байтовый bigint столбец, но AFAIK не существует.1009 * Альтернативой может быть использование SSMS для генерации сценария для вас.Это сгенерирует скрипт, который перестраивает всю таблицу.Если у вас большая таблица или много NCI, то блокировка этого может оказаться неприемлемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...