1

データベースを削除せずに、Sybase ASEのデータベース内のすべてのテーブルを完全に削除するための最良の方法は何ですか?私はスクリプトを使用しています:この質問からですが、参照整合性のためにデータベース内のすべてのテーブルを削除しようとするとエラーが発生します。

MySQLでは使用できますSET FOREIGN_KEY_CHECKS = 0

Sybase ASEでこれを行う方法はありますか、それとも上記のスクリプトを拡張して制約をループすることができますか?

4

3 に答える 3

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 '+@table+' drop '+@constraint
    exec( @SQL)
    fetch cur into @constraint,@table 

  end
close cur
deallocate cursor cur

次に、テーブルをドロップできます。

于 2012-09-28T19:45:47.510 に答える
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 '+@table+' drop constraint '+@constraint
    exec( @SQL)
    fetch cur into @constraint,@table 
    --
  end
close cur
deallocate cursor cur
于 2017-03-22T16:00:53.150 に答える
0

上記のロジックは正しいですが、クエリが間違っているため、「constraint」および「table」キーワードで問題が発生する可能性があります。

  1. 3行目でconstriantNameやtableNameのようなものを使用します
  2. クエリに「制約」がありません。正しいクエリ:'alter table' + @table +'dropconstraint' + @ contraint
于 2014-02-18T10:35:44.913 に答える