在不刪除數據庫的情況下完全刪除Sybase ASE中數據庫中的所有表的最佳方法是什麼?我一直在使用腳本:from this question,但由於參照完整性,我嘗試刪除數據庫中的所有表。刪除Sybase ASE中的所有表(包括那些有約束的表)
在MySQL中,我可以使用SET FOREIGN_KEY_CHECKS = 0
有沒有辦法在Sybase ASE的做到這一點還是可以在上面的腳本通過約束擴展到循環?
在不刪除數據庫的情況下完全刪除Sybase ASE中數據庫中的所有表的最佳方法是什麼?我一直在使用腳本:from this question,但由於參照完整性,我嘗試刪除數據庫中的所有表。刪除Sybase ASE中的所有表(包括那些有約束的表)
在MySQL中,我可以使用SET FOREIGN_KEY_CHECKS = 0
有沒有辦法在Sybase ASE的做到這一點還是可以在上面的腳本通過約束擴展到循環?
首先,你必須放棄約束:
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
接下來,您可以刪除表。
上述邏輯正確,但查詢錯誤,您可能會遇到「約束」和「表」關鍵字的問題。
刪除接受的答案中的所有約束的過程對我來說不起作用。這是一個修改後的版本,適用於我的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