SQLserver 求一个触发器的编写

quanwei9958 发布于 2015/06/28 16:20
阅读 178
收藏 0

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

  要进行一个数据库的优化,需要用到一个触发器,规则如下:

  表A (id int primary key,a nchar(50),b text);

  表B (a nchar(50),b text);

   我需要做的仅仅是插入A的时候往B里也放入一份拷贝,B的a字段为唯一的,插入的时候如果不存在则插入,存在则更新。

  用的SQL server2008

  遇到一个很麻烦的问题是instered里不能select text类型的字段,只能用id从A中查询,我写出来的触发器代码很长,而且还不能正常工作,求哪位前辈指点一下。

加载中
1
SKYjiang哥
SKYjiang哥

我自己刚学触发器,不一定是对的哈,这个问题也隔得挺久的了,估计早就解决了吧。我的代码如下:
 

--create table AA(ID INT PRIMARY KEY,NAME VARCHAR(100),CODE VARCHAR(500));
--create table BB(NAME VARCHAR(100),CODE VARCHAR(500));

create trigger tri_AA
on AA 
after insert 
as 
begin
  declare @id int,@name varchar(100),@code varchar(500);
  select @id = ID,@name = NAME,@code = CODE from inserted;
  IF EXISTS(SELECT * FROM BB WHERE NAME = @name)update BB set CODE = @code where NAME = @name;
  IF not EXISTS(SELECT * FROM BB WHERE NAME = @name)insert into BB(NAME,CODE) values(@name,@code);
end
go

实测了一下,是OK的

quanwei9958
quanwei9958
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
倪倪
这样弄效率太低了吧,触发器本身何况效率也不高。 inserted.b 取不到值吗? 为什么不增量定时同步到表B
quanwei9958
quanwei9958
表B要求实时性
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部