首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问:drop table student cascade为什么不能执行

2012-08-01 
请教:drop table student cascade为什么不能执行?在 SqlServer 2000 上执行下列语句出错SQL codedrop tabl

请教:drop table student cascade为什么不能执行?
在 SqlServer 2000 上执行下列语句出错

SQL code
drop table student cascade

请问在 SqlServer 2000上实现级联删除该怎么写呢?

[解决办法]
SQL Server 不支持 drop table ... cascade 语句,用户需要自己手动删除那些引用删除表的表。

不过可以通过 sysforeignkeys 系统表和动态语句实现。
SQL code
 
create procedure drop_cascade @tabname varchar(256)
as
declare @level int;
set @level=0;

declare @temp table (oid int,lvl int);
insert into @temp values(object_id(@tabname),@level);
while @@rowcount>0
begin
set @level=@level+1;
insert into @temp
select fkeyid,@level from sysforeignkeys
where rkeyid in (select oid from @temp where lvl=@level-1);
end

declare @sql varchar(8000);
set @sql='';
select @sql=@sql+','+quotename(object_schema_name(oid))+'.'+quotename(object_name(oid))
from (select distinct oid,lvl from @temp t
where lvl=(select min(lvl) from @temp where oid=t.oid)) t
order by lvl desc;
set @sql='drop table '+stuff(@sql,1,1,'')+';';

select @sql;
go

exec drop_cascade 'dbo.students';

热点排行