程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> Sybase ASE出現表間循環依賴不能刪除的問題

Sybase ASE出現表間循環依賴不能刪除的問題

編輯:SyBase綜合文章

寫了一個簡單的腳本來清除一個用戶所擁有的表以及存儲過程。感興趣的可以試一下。我是初次寫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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved