赛迪网 > IT技术 数据库 > Sybase
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

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

发布时间:2008.09.10 10:45     来源:赛迪网    作者:fen

【赛迪网-IT技术报道】写了一个简单的脚本来清除一个用户所拥有的表以及存储过程。感兴趣的可以试一下。我是初次写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 ASE出现表间循环依赖不能删除的问题 (08-12) · 初学者必读:有关Sybase ASE数据库的来历 (08-12)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 电子商务盈利新招:垂直化渠道管理新趋势
· 互联网加速蜕变 运营商进军搅动市场格局
· 08 IT技术风起云涌 专访 ITIL落地难在哪
· 视频加密保护解决方案 文档安全解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统