我以前做级联删除时,是建立的关系图,没有写过sql语句来实现级联,现在遇到需要用sql语言来实现了,但我不知道怎么写,哪位大哥帮下忙啊,谢谢!
文章表(主键为ArtNo),文章附件表(里面也有ArtNo),文章评论表(有ArtNo),文章浏览日志表(也有ArtNo),现在想如果删除文章表中的某一个ArtNo,只要其它三个表中任意一个表有相关的ArtNo记录的话都要被删除,没有的话就只删除文章表中的ArtNo,该怎么写sql语句啊?谢谢!
文章表(主键为ArtNo),文章附件表(里面也有ArtNo),文章评论表(有ArtNo),文章浏览日志表(也有ArtNo),现在想如果删除文章表中的某一个ArtNo,只要其它三个表中任意一个表有相关的ArtNo记录的话都要被删除,没有的话就只删除文章表中的ArtNo,该怎么写sql语句啊?谢谢!
解决方案 »
- ASP.NET的js版日历显示不出来时间?
- cs里边的using 和 解决方案资源管理器中的引用
- 关于在数据库中到时候自动执行的问题.
- 如何安装Microsoft.Jet.OLEDB 4.0?
- asp.net(c#)怎么清除已经生成的cookie啊?
- 求多个独立WEB项目的的整合在一起方法?
- VSS2005+.NET2005如何让网站在跟目录下运行
- MVC中的Model 与三层中的Model有什么区别?
- 登录时记录用户表明用户已经登录,但该在什么地方更改记录,表时用户已经离线呢?
- 请各位大虾,帮助解决asp.net中如何使用oracle中的存储过程!!!!!!
- 在windows 窗体中能打开所有格式的文件,用openFileDialog 怎么写呢?
- textbox输入数字的问题,求教
#region 批量执行SQL语句
protected static int ExecuteSqls(string[] strSQLs)
{
SqlConnection myCn=new SqlConnection(strConn);
SqlCommand myCmd=new SqlCommand();
int j=strSQLs.Length;
try
{
myCn.Open();
}
catch(System.Data.SqlClient.SqlException e)
{
throw new Exception(e.Message);
}
SqlTransaction myTrans=myCn.BeginTransaction();
try
{
myCmd.Connection=myCn;
myCmd.Transaction=myTrans;
foreach(string str in strSQLs)
{
myCmd.CommandText=str;
myCmd.ExecuteNonQuery();
}
myTrans.Commit();
return 0;
}
catch(System.Data.SqlClient.SqlException e)
{
myTrans.Rollback();
throw new Exception(e.Message);
}
finally
{
myCmd.Dispose();
myCn.Close();
}
}
#endregionstring[] strs=new string[4];
strs[0]="";
strs[1]="";
strs[2]="";
strs[3]="";//你要执行的SQL语句
ExecuteSqls(strs);
(
ArtNO varchar(20) not null --(外键)
foreign key references 文章表(ArtNO)
on update cascade on delete cascade
)
go
级联更新和删除 另两个表类似
:CREATE proc ttttttt
as
@ArtNo char(5)
/------------------------/
该怎么写这里啊,谢谢各位老大/-------------------------/
goladOnTheBrinkOfRage(愤怒边缘的青年):有没有存储过程的啊老大?
as
@ArtNo char(5)
/------------------------/
Delete from 文章浏览日志表 where ArtNo = @ArtNo
Delete from 文章评论表 where ArtNo = @ArtNo
Delete from 文章附件表 where ArtNo = @ArtNo
Delete from 文章表 where ArtNo = @ArtNo
/-------------------------/
go
@intArtNo int
--@intArtNo 要删除列的主键
as
begin transaction
--事务开始
delete 文章表 where ArtNo=@intArtNo
delete 文章附件表 where ArtNo=@intArtNo
delete 文章评论表 where ArtNo=@intArtNo
delete 文章浏览日志表 where ArtNo=@intArtNo
--事务结束
commit transaction
return 0--删除成功
rollback transaction
return 1--出错
有没有哪位大哥有更好的方法???
我的解决方法:CREATE PROCEDURE funDel
@chrArtNo char(5) --文章编号
AS
declare @sArtNo1 int
declare @sArtNo2 int
declare @sArtNo3 int
begin
set @sArtNo1=(select count(ArtNo) from ?? where ArtNo=@chrArtNo)
set @sArtNo2=(select count(ArtNo) from ?? where ArtNo=@chrArtNo)
set @sArtNo3=(select count(ArtNo) from ?? where ArtNo=@chrArtNo)
if(@sArtNo1>0 or @sArtNo2>0 or @sArtNo3>0)
begin
delete from ?? where ArtNo=@chrArtNo
delete from ?? where ArtNo=@chrArtNo
delete from ?? where ArtNo=@chrArtNo
delete from ?? where ArtNo=@chrArtNo
end
else
begin
delete from ?? where ArtNo=@chrArtNo
endend
GO