Answers:
要修改现有表中的现有列:
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
TheQ
的答案假设您正在更改现有列,但我认为情况并非如此?请参阅我的代码答案,以使用此默认约束添加新列。
GETUTCDATE()
,而不是GETDATE()
在SQL Server的该表中,将该列的默认值指定为CURRENT_TIMESTAMP
。该列的数据类型可以是datetime或datetime2。
例如
Create Table Student
(
Name varchar(50),
DateOfAddmission datetime default CURRENT_TIMESTAMP
);
CURRENT_TIMESTAMP
返回一个datetime
值。应该避免。而是使用UTC SYSUTCDATETIME
返回datetime2
UTC。
虽然标记的答案是正确的:
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn
向列中添加默认datetime值时,应始终注意时区。
举例来说,此datetime
值旨在指示成员何时加入网站,并且您希望将其显示给用户,这GETDATE()
将为您提供服务器时间,因此如果用户位于服务器的其他区域中,则可能会显示差异。
如果您希望与国际用户打交道,则在某些情况下,最好使用GETUTCDATE():
返回当前数据库系统时间戳作为日期时间值。不包括数据库时区偏移量。此值表示当前UTC时间(世界标准时间)。此值是从运行SQL Server实例的计算机的操作系统派生的。
ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETUTCDATE() FOR YourColumn
检索值时,前端应用程序/网站应将此值从UTC时间转换为请求该值的用户的区域设置/区域性。
在该列上禁止Null,并在以下列上设置默认值 getdate()
/*Deal with any existing NULLs*/
UPDATE YourTable SET created_date=GETDATE() /*Or some sentinel value
'19000101' maybe?*/
WHERE created_date IS NULL
/*Disallow NULLs*/
ALTER TABLE YourTable ALTER COLUMN created_date DATE NOT NULL
/*Add default constraint*/
ALTER TABLE YourTable ADD CONSTRAINT
DF_YourTable_created_date DEFAULT GETDATE() FOR created_date
这也适用:
CREATE TABLE Example(
...
created datetime default GETDATE()
);
要么:
ALTER TABLE EXAMPLE ADD created datetime default GETDATE();
假设您为注册系统创建了一个数据库表。
IF OBJECT_ID('dbo.registration_demo', 'U') IS NOT NULL
DROP TABLE dbo.registration_demo;
CREATE TABLE dbo.registration_demo (
id INT IDENTITY PRIMARY KEY,
name NVARCHAR(8)
);
现在有几个人注册。
INSERT INTO dbo.registration_demo (name) VALUES
('John'),('Jane'),('Jeff');
然后您意识到他们需要一个时间戳记。
如果此应用仅限于地理区域,则可以将本地服务器时间与一起使用GETDATE()
。否则,您应该使用默认值来关注Tanner对于全球受众的考虑GETUTCDATE()
。
在一个像这样的答案的语句中添加具有默认值的列。
ALTER TABLE dbo.registration_demo
ADD time_registered DATETIME DEFAULT GETUTCDATE();
让我们再找一个注册者,看看数据是什么样的。
INSERT INTO dbo.registration_demo (name) VALUES
('Julia');
SELECT * FROM dbo.registration_demo;
id name time_registered 1 John NULL 2 Jane NULL 3 Jeff NULL 4 Julia 2016-06-21 14:32:57.767
在SQLPlus中创建表时就像
SQL>创建表测试
( Test_ID number not null,
Test_Date date default sysdate not null );
SQL>插入Test(id)值(1);
Test_ID Test_Date
1 08-MAR-19