データベースを削除せずに、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
上記のロジックは正しいですが、クエリが間違っているため、「constraint」および「table」キーワードで問題が発生する可能性があります。