如题:
我想创建一个触发器 当在A表中插入数据时把新数据再插入到B表
A表和B表的字段不同
间的触发器如下:
CREATE TRIGGER [Dth_Action_insert] on [dbo].[zydsj]
instead of insert
as
begin
set nocount on;
declare
@OnlyId varchar(23),
@IsSync tinyint,
@Opertime datetimeset @IsSync = (select czbh from inserted)
set @OnlyId = (select jccfs from inserted)
set @Opertime = (select rq from inserted)insert into Dth_Action
(OnlyId,IsSync,Opertime)
values
(@OnlyId,@IsSync,@Opertime)
end
我想创建一个触发器 当在A表中插入数据时把新数据再插入到B表
A表和B表的字段不同
间的触发器如下:
CREATE TRIGGER [Dth_Action_insert] on [dbo].[zydsj]
instead of insert
as
begin
set nocount on;
declare
@OnlyId varchar(23),
@IsSync tinyint,
@Opertime datetimeset @IsSync = (select czbh from inserted)
set @OnlyId = (select jccfs from inserted)
set @Opertime = (select rq from inserted)insert into Dth_Action
(OnlyId,IsSync,Opertime)
values
(@OnlyId,@IsSync,@Opertime)
end
呵呵,我就给你写了一条。可以看看你的代码中括号中的代码,当inserted有多条记录时,它如何给变量IsSync 赋值呢?所以这个代码错在这个出发点上。
where order_test.orderid=inserted.orderid and
inserted.customerid not in (select customerid from cust_test)这就说明了如何使用inserted了嘛。只不过它是delete,而你是要insert,但是这没有什么阻碍。基础要点对路了,路就自己能走出来了。
替换了原来的动作,改为for insert
我没有仔细看是否lz不应该替换,只是基于它的说法“当在A表中插入数据时把新数据再插入到B表,A表和B表的字段不同”,他大概是无所谓instea of还是after of操作的。
(id Int Identity(1,1),
title Varchar(20),
tmpid Int
)
Create table TEST2
(
title Varchar(20),
tmpid Int
)
GO
--建立触发器
Create Trigger [TEST_Insert] On TEST
FOR INSERT
As
Update TEST Set tmpid=@@IDENTITY
insert into TEST2 select title,tmpid from TEST where tmpid=@@IDENTITY
GO
--测试
Insert TEST (title) Values( 'AAAA ')
Insert TEST (title) Values( 'BBBB ')
Select * from TEST2
--删除测试环境
Drop table TEST2
Drop table TESTAAAA 1
AAAA 2
BBBB 2