#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)
andsysdatetime()
….
Ответ №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;
Ответ №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
. Если нет, то используется значение по умолчанию.