Конвертировать столбец из даты в сервер SQL Datetime - PullRequest
8 голосов
/ 08 декабря 2011

У меня есть столбец с именем Lastmodified с типом данных Date, но он должен был быть DateTime.

Есть ли способ конвертировать столбец?

Когда я использую функцию «Дизайн» в SQL Server Management Studio, я получаю следующую ошибку:

Сохранение изменений не разрешено. Для внесенных вами изменений требуется следующее таблица должна быть удалена и создана заново.

Не особо интересует удаление таблицы, я просто хочу знать, возможно ли преобразовать столбец из Date в Datetime или мне нужно удалить столбец и создать новый с правильным типом данных

Ответы [ 3 ]

25 голосов
/ 08 декабря 2011

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

Вы можете просто сделать это, используя SQL:

ALTER TABLE Tab ALTER COLUMN LastModified datetime2 not null

(Я выбрал datetime2 вместо datetime, так как первый рекомендуется для всех новых разработок , а поскольку столбец в настоящее время date, я знаю, что вы используете SQL Server 2008 или более позднюю версию)

3 голосов
/ 08 декабря 2011

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

SQL Management Studio обычно выполняет это путем создания временной таблицы с новым именем столбца, копирования значений поверх, удаления исходной таблицы со старым столбцом, а затем переименования новой временной таблицы в новое имя. Часто это происходит без людей, даже не подозревающих об этом.

Однако это может быть очень инвазивным подходом, особенно если у вас уже есть много строк в таблице, поэтому вы можете просто написать сценарий SQL, добавить новый столбец в таблицу, скопировать значения, отбросить исходный столбец, а затем с помощью sp_rename измените имя нового временного столбца обратно на исходное имя столбца. Это та же идея, что и в SQL Management Studio, за исключением того, что они удаляют и воссоздают всю таблицу, а вы просто отбрасываете и воссоздаете столбец.

Однако, если вы действительно хотите, чтобы SQL Manangement Studio делал это таким образом, вы можете отключить это сообщение об ошибке. Я полагаю, что это было добавлено изначально, потому что люди не хотели удалять и воссоздавать таблицу по умолчанию. Чтобы отключить это сообщение, перейдите в Инструменты-> Параметры-? Дизайнеры и снимите флажок с «Запретить сохранение изменений, требующих пересоздания таблицы» , тогда вы сможете сохранить Ваши изменения в конструкторе.

Prevent saving changes that require table re-creation

3 голосов
/ 08 декабря 2011

Это просто настройка безопасности в SQL Server Mgmt Studio - вы можете отключить ее, если у вас есть приключения: -)

enter image description here

Отключите здесь флажок, и вы сможетеделай что хочешь!

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