在SQL Server中,想要在datetime列中默认插入当前时间和插入日期。

5

我希望能够在日期时间列中自动插入当前时间,在默认情况下它会插入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
这是SQL Server,为什么标记为MySQL? - tadman
1
添加默认约束,其值为 GETDATE() - Backs
1
SQL Server 触发器最常见的错误是假设 inserteddeleted 只包含一行。第二个最常见的错误是不使用 inserteddeleted 表,这些表可以明确告诉你哪些行刚刚受到影响。 - Damien_The_Unbeliever
1个回答

0
一种方法是向您的列添加默认约束。当您不提供值时,将使用默认约束来填充该列。 示例
-- 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接