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 个以上的值。当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的。该语句已终止。
怎么可能??
提前致谢..
一种方法是向列添加默认约束。当您不提供值时,将使用默认约束来填充该列。
例子
-- 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)