SQL触发器中怎么插入与数据库表中不重复的记录

SQL触发器中怎么插入与数据库表中不重复的记录,第1张

create

trigger

a1_a

on

[dbo].[a1]

for

insert

as

insert

into

b.dbo.b1(g,h,j)

select

c

as

g,d

as

h,e

as

j

from

inserted

在a数据库a1表,加上面的触发器(只限于同一台服务器不通数据库数据转存),如果要在不同的服务器上,就先在a所在服务器上加链接服务器,触发器修改为:

create

trigger

a1_a

on

[dbo].[a1]

for

insert

as

insert

into

[server

name].b.dbo.b1(g,h,j)

select

c

as

g,d

as

h,e

as

j

from

inserted

这就是自己实现一个ID自增的东西。

比如的你有个公用类专门用来生成后面的数字,所有需要用到的方法都调用这个类的一个方法我们就叫它nextId吧,只要这个方法是线程安全的就可以了。

IdUtils.nextId()

int nextId() {

lock(this){

return this.id++

}

}

应用启动的时候从数据库查询一下id的最大值并设置给工具类的id,让它接着增长就行了。

具体实现看你用什么语言。

请仔细阅读别人回答的是什么意思。想想oracle的sequence的实现,是不是类似?

create trigger tgr_tjiBenGongGaoXinXi_insert

on tjiBenGongGaoXinXi

for insert

as

delete from people

where peopleId in (select peopleId from people group by peopleId having count(peopleId) >1)

and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

go

删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

变相的不让插入了,不知道符不符合你的要求。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9895250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存