Asp教程

通过asp实例结合结合ACCESS,MSSQL来更好的深入Asp学习 - 爬坡者

« sql 改数据库名[转]将ASP代码封装成DLL »

Sql触发器 操作多条记录

Man1983 于 papozhe.com 2007-8-13
现有三个表。表STEP的一个字段StepID 对应表Part的多个PARTID PART表中的每个字段 在表[2440ZYKFB]上以字段形式存在
删除Step记录我用的是一个存储过程[lue]
SQL语句大概这样

If exists(select name from sysobjects where name='drop_Step' and type='p')

drop Proc drop_Step

go

create Proc drop_Step

@StepID char(4)

as

delete from lyt_test_Problem where PartId in (select PartID from lyt_test_Part where StepId=@StepID)

delete from lyt_test_Solution where PartId in (select PartID from lyt_test_Part where StepId=@StepID)

delete from lyt_test_Part where StepId=@StepID

delete from lyt_test_step where StepId=@StepID


上面红色字体部分我删除了一个STEPID,并可能删除了多条PARTID记录。

开始的时候我在part表建的触发器[DELETE]大概是这样的
Man1983 于 papozhe.com 2007-8-13

if exists(select name from sysobjects where name='tr_del_part' and type='tr')
drop trigger tr_del_part
go
create trigger tr_del_part
on lyt_test_Part
for delete
as
declare
@PartID char(4),
@Part_Ename varchar(50),
@StrSql varchar(80),
@TableName varchar(30),
@ProductID varchar(30)
select @ProductID=ProductID,@PartID=PartID,@Part_Ename=Part_Ename from deleted
BEGIN
select @TableName=English_Name from lyt_test_product where productID=@ProductID
delete from lyt_test_problem where PartID=@PartID
delete from lyt_test_solution where PartID=@PartID
set @StrSql='ALTER TABLE ['+@TableName+'] drop column '+ @Part_Ename
print @StrSql
exec (@StrSql)
END

Man1983 于 papozhe.com 2007-8-13
这样我在删除条记录的时候是我完全可以的
,包括蓝色部分的,表[2440ZYKFB]中drop对应的删掉的那个PartName

但是当stepid包含多个partid时候,删除时候

表[2440ZYKFB]只能去掉第一个对应part表的记录,关键是没循环起来,

下面是解决方案。。。
Man1983 于 papozhe.com 2007-8-13

if exists(select name from sysobjects where name='tr_del_part' and type='tr')

drop trigger tr_del_part

go

create trigger tr_del_part on lyt_test_Part

for delete
as
declare @PartID char(4),@Part_Ename varchar(50),@StrSql varchar(80),@TableName varchar(30),@ProductID varchar(30)
declare c_1 cursor for SELECT ProductID,PartID,Part_Ename FROM deleted
open c_1
fetch next from c_1 into @ProductID,@PartID,@Part_Ename

while @@fetch_status = 0

BEGIN

select @TableName=English_Name from lyt_test_product where productID=@ProductID

delete from lyt_test_problem where PartID=@PartID

delete from lyt_test_solution where PartID=@PartID

set @StrSql='ALTER TABLE ['+@TableName+'] drop column '+ @Part_Ename

print @StrSql

exec (@StrSql)

fetch next from c_1 into @ProductID,@PartID,@Part_Ename

END
--=====释放
close c_1

deallocate c_1


Man1983 于 papozhe.com 2007-8-13

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Spirit Build 80710

Copyright 2007-2008 papozhe.com [asp教程] All Rights Reserved.
浙ICP备07030537号
免责申明:所有文章除特别声明,均来自网上,主要为学习用!内容仅供参考,版权归原作者。如侵犯您利益,请来信告知.
Email:papozhe$Gmail.com QQ:76336503