想要在日期时间列中默认插入当前时间,并在 sql server 中插入日期

use*_*456 5 sql sql-server datetime

我想在日期时间列中使用插入的日期自动插入当前时间。默认情况下,它插入 00:00:00

我创建了触发器

Create trigger tr_tm on emp
after insert,update
as
declare @tme time

set @tme=(select CONVERT(varchar(7),start_date,108) from emp)

update emp
set @tme=convert(varchar(8),getdate(),108)
where @tme='00:00:00'
go
Run Code Online (Sandbox Code Playgroud)

但它显示错误:

消息 512,级别 16,状态 1,过程 tr_te,第 15 行子查询返回了 1 个以上的值。当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的。该语句已终止。

怎么可能??

提前致谢..

des*_*ata 0

一种方法是向列添加默认约束。当您不提供值时,将使用默认约束来填充该列。

例子

-- Example table.
CREATE TABLE Example
    (
        A   INT,
        B   TIME            DEFAULT(CAST(GETDATE() AS TIME))
    )
;
Run Code Online (Sandbox Code Playgroud)

插入数据时,如果我们不提供值,将应用默认值。

-- Adding data, without referencing column.
INSERT INTO Example
    (
        A
    )
VALUES
    (1),
    (2),
    (3)
;
Run Code Online (Sandbox Code Playgroud)

您还可以明确指定希望应用默认值。

-- Adding data, using DEFAULT.
INSERT INTO Example
    (
        A,
        B
    )
VALUES
    (10, DEFAULT),
    (20, DEFAULT),
    (30, DEFAULT)       
;
Run Code Online (Sandbox Code Playgroud)

您还可以保留忽略默认值并提供您自己的值的选项。

-- Adding data without using default value.
INSERT INTO Example
    (
        A,
        B
    )
VALUES
    (100, '09:30:00'),
    (200, '10:30:00'),
    (300, '11:30:00')       
;
Run Code Online (Sandbox Code Playgroud)

上面的三个查询返回:

A   B
1   13:19:28.1900000
2   13:19:28.1900000
3   13:19:28.1900000
10  13:19:28.1900000
20  13:19:28.1900000
30  13:19:28.1900000
100 09:30:00.0000000
200 10:30:00.0000000
300 11:30:00.0000000
Run Code Online (Sandbox Code Playgroud)