在不删除数据库的情况下,在 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 '+@table+' drop '+@constraint
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 '+@table+' drop constraint '+@constraint
exec( @SQL)
fetch cur into @constraint,@table
--
end
close cur
deallocate cursor cur
上述逻辑是正确的,但查询是错误的,您可能会遇到“约束”和“表”关键字的问题。