表结构如下
CREATE TABLE test1 (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[code] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[name] [nvarchar] (500) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[createtime] [datetime] not NULL default(getdate()) ,
[modifytime] [datetime] NULL
) ON [PRIMARY]
GO
触发器如下
create trigger trg_test on test1
for insert
as
begin
declare @code varchar(50),@name varchar(50) select @code=code,@name=name from inserted
insert into test1(code,name,modifytime)
values(@code,@name,getdate())
end
go
执行
INSERT INTO test1 (code,name) VALUES ('0001','张三')
结果
1 0001 张三 2006-12-13 14:34:47.483 NULL
2 0001 张三 2006-12-13 14:34:47.500 2006-12-13 14:34:47.500
执行一次为什么会插入两条记录,而且第一条没有时间
CREATE TABLE test1 (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[code] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[name] [nvarchar] (500) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[createtime] [datetime] not NULL default(getdate()) ,
[modifytime] [datetime] NULL
) ON [PRIMARY]
GO
触发器如下
create trigger trg_test on test1
for insert
as
begin
declare @code varchar(50),@name varchar(50) select @code=code,@name=name from inserted
insert into test1(code,name,modifytime)
values(@code,@name,getdate())
end
go
执行
INSERT INTO test1 (code,name) VALUES ('0001','张三')
结果
1 0001 张三 2006-12-13 14:34:47.483 NULL
2 0001 张三 2006-12-13 14:34:47.500 2006-12-13 14:34:47.500
执行一次为什么会插入两条记录,而且第一条没有时间
第二条为触发器产生的数据,里面指定了getdate(),所以有值!·
你自己用语句插入一条,那条数据是没有时间的然后触发器触发,又插入一条
这个条数据的MODIFYTIME是有时间的!
create trigger trg_test on test1
instead of insert
as
begin
insert into test1(code,name,modifytime)
select code,name,getdate() from inserted
end
go
这只要在更新语句中来完成:
update test1
set modifytime=getdate(),name='aaa'
where code=1
INSTEAD OF insert
as
begin
declare @code varchar(50),@name varchar(50) select @code=code,@name=name from inserted
insert into test1(code,name,modifytime)
values(@code,@name,getdate())
end
go
楼主是这个意思吗?
指定执行触发器而不是执行触发 SQL 语句,从而替代触发语句的操作。楼主想实现什么效果?
[id] [int] IDENTITY (1, 1) NOT NULL ,
[code] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[name] [nvarchar] (500) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[createtime] [datetime] not NULL default(getdate()) ,
[modifytime] [datetime] NULL -----------------------------没有默认值,所以为空
) ON [PRIMARY]
GO第二条是触发器增加的。
可不可以这样理解
INSTEAD OF 和for insert 的区别就是触发触发器的时候还执行不执行原来的sql语句啊
根据楼主的需求,就应该用instead of触发器
如果我一定要用for insert 触发器该怎么做
for insert
as
begin
insert into test1
select code,name,getdate() from inserted
end
go
create trigger trg_test on test1
instead of insert
as
begin
insert into test1
select code,name,getdate() from inserted
end
go