Sybase ASE出现表间循环依赖不能删除的问题

2008-08-18 13:16:44 北京时间
写了一个简单的脚本来清除一个用户所拥有的表以及存储过程。感兴趣的可以试一下。我是初次写ASE下边的存储过程,肯定有更好的解决方法。本想直接在存储过程里drop东西,可惜失败了。这个存储过程只是生成了清除表的sql脚本。拷贝再执行即可。

具体示例如下:

 

create procedure cleardb(@username varchar(32) in)

as

begin

declare @strdrop varchar(512)

select @strdrop=''

set @strdrop='setuser ''' + @username + ''''

print @strdrop

 

/* 1begin drop all constraints */

declare @tname varchar(128), @tableid int, @cid int

declare @cname varchar(128)

set @strdrop=''

 

declare c_constraints cursor for select a.id, c.tableid, a.name from sysobjects a, sysusers b, sysconstraints c where a.type='RI' and a.uid=b.uid and b.name=@username and c.constrid=a.id

open c_constraints

fetch next from c_constraints into @cid, @tableid, @cname

while (@@sqlstatus=0)

begin

select @tname=name from sysobjects where id=@tableid

set @strdrop='alter table ' + @username + '.' + @tname + ' drop constraint ' + @cname

print @strdrop

fetch next from c_constraints into @cid, @tableid, @cname

end

close c_constraints

deallocate cursor c_constraints

 

/*2 drop tables */

set @tname=''

set @strdrop=''

declare c_tables cursor for select a.name from sysobjects a, sysusers b where a.type='U' and a.uid=b.uid and b.name=@username

open c_tables

 

fetch next from c_tables into @tname

while (@@sqlstatus = 0)

begin

set @strdrop = 'drop table ' + @username + '.' + @tname

print @strdrop

fetch next from c_tables into @tname

end

close c_tables

deallocate cursor c_tables

 

/*3 drop procedures*/

declare @procname varchar(128)

declare c_procs cursor for select a.name from sysobjects a, sysusers b where a.type='P' and a.uid=b.uid and b.name=@username

open c_procs

 

fetch next from c_procs into @procname

while (@@sqlstatus=0)

begin

set @strdrop = 'drop procedure ' + @username + '.' + @procname

print @strdrop

fetch next from c_procs into @procname

end

close c_procs

deallocate cursor c_procs

set @strdrop='setuser '

print @strdrop

end




发表评论

请文明参与讨论,禁止漫骂攻击。本站保留不刊登无关和不雅评论的权力。


用户名: 密码: 匿名

相关新闻
搭建测试数据库服务器时,遇到了乱码问题,之前没有遇到是因为开
请问我想将现在的SYBASE 逻辑卷改名,主要是master、proc、tempd
一:SQL Bisic ◆1:SQL(Structured Quary Language)特性: a:
Sybase ASA中查询元信息的几个常用SQL函数: sp_column_privilege
提到Sybase,原意为既是System, 也是Database。 可拆作SYB ASE

广告
© 2008 The Czz5 Company. All Rights Reserved. 关于我们 - 联系我们 - 广告业务 - 网站地图 - 版权声明 - 友情连接 - 网站投稿 - 致信编辑