Добавление нового столбца и установка GETDATE в качестве значения в SQL Server 2017

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Это мой запрос:

 alter table reseau add datemodification datetime default getdate()
  

После выполнения строки имеют NULL в качестве своего значения, но я хочу, чтобы им было присвоено текущее значение GETDATE() .

Как я могу это сделать?

Комментарии:

1. Начиная с SQL Server 2008, вам действительно следует прекратить использовать Datetime и getdate() и вместо этого использовать datetime2(n) and sysdatetime() ….

Ответ №1:

DEFAULT это CONSTRAINT который устанавливает значение столбца, когда вы опускаете его при выполнении INSERT . Если вы хотите затем создать столбец с DEFAULT значением и заполнить его в точке, в которой указано DEFAULT значение в момент его создания, затем добавьте WITH VALUES в конце инструкции:

 CREATE TABLE dbo.test (ID int);
INSERT INTO dbo.Test VALUES (1),(2),(3),(4),(5);
GO

ALTER TABLE dbo.Test ADD D datetime DEFAULT GETDATE() WITH VALUES;
GO

SELECT *
FROM dbo.Test;
GO

DROP TABLE dbo.Test;
  

db<> скрипта

Ответ №2:

Если вы хотите обновить существующие значения после добавления столбца, используйте update :

 update reseau
    set datemodification = getdate();
  

Значение по умолчанию вступает в силу для новых строк.

В качестве альтернативы вы можете определить столбец как not null :

 alter table reseau add datemodification not null datetime default getdate();
  

Тогда в существующих строках будет использоваться default значение.

Здесь приведена таблица db<>fiddle, иллюстрирующая два метода.

Комментарии:

1. @ZakariaBadis . . . Вы добавляете новый столбец. Это зависит от того, хотите ли вы, чтобы оно имело значение NULL. Если вы это сделаете, то вам нужно использовать update . Если нет, то используется значение по умолчанию.