编写简单触发器
有这样两个表
create table Customers(
id char(6) not null,
name char(20) not null,
primary key(id))
create table Orders(
id integer identity,
CustomerID char(6) not null,
Freight decimal(12,2) not null,
primary key(id))
现在我需要通过触发器解决如下问题:
1、如果修改customers表中某条记录的id时,相应修改orders表中customerid列,保持这两个表修改前后的对应关系。
2、如果删除customers表中的某条或某些符合条件的记录时,将orders表中相应记录一并删除,orders表中没有垃圾数据。
兄弟对sql不熟悉,请教各位,谢谢!!
问题点数:100、回复次数:8Top
1 楼lsqkeke(可可)回复于 2006-03-02 16:46:57 得分 2
主键可以去修改??Top
2 楼lsqkeke(可可)回复于 2006-03-02 16:50:51 得分 2
安全不啊???
不提倡这样!
那你修改时是用name去定位一条记录,来修改主键的?Top
3 楼zhuhuying(zhy)回复于 2006-03-02 17:02:19 得分 1
你那都是表的主键怎么改呀?Top
4 楼msjqd(黑色幽默)回复于 2006-03-02 17:08:21 得分 5
主键是可以修改的
不过修改主键不提倡的
这样会频繁的发生主键重复错误的!!!Top
5 楼yrb(老土傻帽)回复于 2006-03-02 17:09:03 得分 0
主键为什么不可修改呢?可以用旧的主键值定位修改为新的主键值啊,比如:
update customers set id = '000002' where id = '000001'
当然表customers可以修改为
create table Customers(
id00 integer identity,
id char(6) not null,
name char(20) not null,
primary key(id00))Top
6 楼yrb(老土傻帽)回复于 2006-03-02 17:10:56 得分 0
谢谢各位,我现在关心的是怎么写这样的触发器。Top
7 楼zlp321002(Life Is Good,Let's Shine)回复于 2006-03-02 17:19:38 得分 90
Create trigger TRG_Customers on Customers
for update,delete,insert
as
Begin
if not exists (select 1 from inserted) --删除
begin
delete Orders from deleted D where CustomerID=D.id
end
if exists (select 1 from inserted) and exists (select 1 from deleted) --更新
begin
Update Orders set CustomerID=I.id from Customers A inner join inserted I
on A.id=I.id
end
if not exists (select 1 from deleted) --插入
begin
--插入自己写
end
end
Top
8 楼yrb(老土傻帽)回复于 2006-03-02 17:31:17 得分 0
谢谢zlp321002兄。
Top




