你的思路有问题 1,b.name,b.pas 这些非唯一的值怎么可能用作关联条件 2,从你的描述来看,a表中本来就有这些记录了,因为插入b时 没有记录下a.id所以 你想把b里的再插一次到a把新记录的identity值写到b, 业务上就说不通单从实现上来讲:create trigger t on ta for insert as update b set b.[a.id]=a.[a.id] from b inner join inserted a on a.[a.name]=b.[b.name] and a.[a.pas]=b.[b.pas]
select @@identity不过会同会话受其它作用域影响最好用
select SCOPE_IDENTITY()
create trigger tri_g on b
for insert
as
begin
update a set a.a1=c.a1 from inserted c join a on a.id=c.id
end
declare @t table(ID int identity(1,1),[Name] varchar(10))
insert @t select 'A'
SELECT @@IDENTITY
insert @t select 'B'
SELECT @@IDENTITY
/*
(影響 1 個資料列)
----------------------------------------
1(影響 1 個資料列)
(影響 1 個資料列)
----------------------------------------
2(影響 1 個資料列)*/
• SCOPE_IDENTITY 返回为当前会话和当前作用域中的某个表生成的最新标识值。
• IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。
al b.id
0 1
0 2
0 3
0 4
0 5修改A.a1=B.id(新增的id)
用触发器吧,当B表插入数据时,修改A表:
--try
create trigger tr on B
for insert as
begin
update A set al=I.id
from A join inserted I on A.数据列=I.数据列
end
GO
具体是这样,
A B
a.id a.name a.pas b.id a.id b.name b.pas
1 1 1 1 0 1 1
2 ... ... 2 0 .. ..
本来B表中a.id是与A表中的a.id关联,但现在a.id中数据由于到入的时候全都为0了,所以
我要把 b.name和b.pas插入到A表中,这样就得到了id,然后把这个id在B表中update
这样就关联上了,
请问几位 这样怎么实现比较好
1,b.name,b.pas 这些非唯一的值怎么可能用作关联条件
2,从你的描述来看,a表中本来就有这些记录了,因为插入b时 没有记录下a.id所以 你想把b里的再插一次到a把新记录的identity值写到b, 业务上就说不通单从实现上来讲:create trigger t on ta
for insert
as
update b set b.[a.id]=a.[a.id] from b inner join inserted a on a.[a.name]=b.[b.name] and a.[a.pas]=b.[b.pas]
我的程序思路是这样:
查询b.id b.name b.pas ,把b.name b.pas 插入到A表中,这样就得到了a.id
通过刚才查询的b.id找到B表中的数据 在把B表中的a.id与 刚刚得到的a.id 进行关联。
这我程序的思路,不知道sql语言能否实现。
回答:
1 唯一性应该是通过B表中的id做为唯一性。
2 B表中的id=0的数据 在A表中完全没有相关数据
insert A select name,pas from Btruncate table Binsert B select * from A