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

时间:2016-04-29 10:13:15

标签: sql sql-server datetime

我想自动插入当前时间,并在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

但它显示错误:

  

消息512,级别16,状态1,过程tr_te,行15返回子查询   超过1个值。当子查询跟随=时,不允许这样做,   !=,<,< =,>,> =或当子查询用作表达式时。该   声明已被终止。

怎么可能?

提前致谢..

1 个答案:

答案 0 :(得分:0)

一种方法是在列中添加default constraint。当您没有提供值时,默认约束将用于填充列。

示例

-- Example table.
CREATE TABLE Example
    (
        A   INT,
        B   TIME            DEFAULT(CAST(GETDATE() AS TIME))
    )
;

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

-- Adding data, without referencing column.
INSERT INTO Example
    (
        A
    )
VALUES
    (1),
    (2),
    (3)
;

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

-- Adding data, using DEFAULT.
INSERT INTO Example
    (
        A,
        B
    )
VALUES
    (10, DEFAULT),
    (20, DEFAULT),
    (30, DEFAULT)       
;

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

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

上面的三个查询返回:

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