Измените Nullable столбец на NOT NULL со значением по умолчанию - PullRequest
59 голосов
/ 06 июля 2010

Сегодня я наткнулся на старую таблицу со столбцом даты и времени под названием «Создано», в котором допускаются значения NULL.Теперь я хотел бы изменить это так, чтобы оно НЕ было ПУСТО (NULL), а также включить ограничение для добавления значения по умолчанию (getdate ()).

Пока у меня есть следующий скрипт, которыйработает нормально при условии, что я предварительно очистил все пустые значения:

ALTER TABLE dbo.MyTable ALTER COLUMN Created DATETIME NOT NULL 

Можно ли также указать значение по умолчанию в операторе ALTER?

Ответы [ 4 ]

86 голосов
/ 06 июля 2010

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

ALTER TABLE dbo.MyTable
ADD CONSTRAINT my_Con DEFAULT GETDATE() for created

UPDATE MyTable SET Created = GetDate() where Created IS NULL

ALTER TABLE dbo.MyTable 
ALTER COLUMN Created DATETIME NOT NULL 
10 голосов
/ 06 июля 2010

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

Update dbo.TableName
Set
Created="01/01/2000"
where Created is NULL
1 голос
/ 07 октября 2015

вам нужно выполнить два запроса:

Один - добавить значение по умолчанию к необходимому столбцу

ALTER TABLE 'Table_Name` ADD DEFAULT'значение 'FOR' Column_Name '

я хочу добавить значение по умолчанию для столбца IsDeleted, как показано ниже:

Пример: ALTER TABLE [dbo]. [Сотрудники] ADD По умолчанию 0 дляIsDeleted

Два - для изменения значения столбца, допускающего значение NULL

ALTER TABLE 'table_name' ALTER COLUMN 'column_name' 'data_type' NOTNULL

я хочу сделать столбец IsDeleted ненулевым

ALTER TABLE [dbo]. [Сотрудники] Изменить столбец IsDeleted BIT NOT NULL

1 голос
/ 06 июля 2010

Если это SQL Server, вы можете сделать это в свойствах столбца в представлении конструктора

Попробуйте это?:

ALTER TABLE dbo.TableName 
  ADD CONSTRAINT DF_TableName_ColumnName
    DEFAULT '01/01/2000' FOR ColumnName
...