2012-09-24 53 views
1

在不刪除數據庫的情況下完全刪除Sybase ASE中數據庫中的所有表的最佳方法是什麼?我一直在使用腳本:from this question,但由於參照完整性,我嘗試刪除數據庫中的所有表。刪除Sybase ASE中的所有表(包括那些有約束的表)

在MySQL中,我可以使用SET FOREIGN_KEY_CHECKS = 0

有沒有辦法在Sybase ASE的做到這一點還是可以在上面的腳本通過約束擴展到循環?

回答

2

首先,你必須放棄約束:

declare cur cursor 
for 
    select SOR.Name as constraint, SOT.Name as table 
    from sysreferences SR 
    join sysobjects SOR on SOR.id = SR.constrid 
    join sysconstraints SC on SC.constrid = SR.constrid 
    join sysobjects SOT on SOT.id = SC.tableid 
go 
declare @constraint varchar(500) 
declare @table varchar(500) 
declare @SQL varchar(500) 

open cur 
fetch cur into @constraint,@table 
    while (@@sqlstatus = 0) 
    begin 

    select @SQL = 'alter table '[email protected]+' drop '[email protected] 
    exec(@SQL) 
    fetch cur into @constraint,@table 

    end 
close cur 
deallocate cursor cur 

接下來,您可以刪除表。

0

上述邏輯正確,但查詢錯誤,您可能會遇到「約束」和「表」關鍵字的問題。

  1. 使用類似constriantName和表名的3線
  2. 查詢缺少 「約束」,正確的查詢: '改變表' + @table + '下降約束' + @約束
1

刪除接受的答案中的所有約束的過程對我來說不起作用。這是一個修改後的版本,適用於我的ASE16。

BEGIN 
declare cur cursor 
for 
    select o.name, t.name from sysreferences r 
    join sysobjects o on o.id = r.constrid 
    join sysconstraints c on c.constrid = r.constrid 
    join sysobjects t on t.id = c.tableid 
END 
GO 
-- 
declare @constraint varchar(500) 
declare @table varchar(500) 
declare @SQL varchar(500) 
-- 
open cur 
fetch cur into @constraint,@table 
    while (@@sqlstatus = 0) 
    begin 
    -- 
    select @SQL = 'alter table '[email protected]+' drop constraint '[email protected] 
    exec(@SQL) 
    fetch cur into @constraint,@table 
    -- 
    end 
close cur 
deallocate cursor cur 
相關問題