2011-01-25 1 views
2

私はすべてのテーブルとストアドプロシージャをスキーマにドロップしたいのですが、誰もこれを行う方法を知っていますか?可能であればデータベース全体を削除しないようにしたいと思います。sybase:可能であれば、すべてのテーブルを削除し、procsを保存するにはどうすればよいですか?

+0

を試してみてください?この種の操作では、一般的に、リストをループするために動的SQLが必要です。 –

+0

できればユーザとカスタムタイプの再作成を避けたかったのです。プラス、私はちょうどこれが行われる方法が不思議です、私は確かにドロップ/再作成することができます素晴らしい方法がない場合。 –

答えて

5

一連のドロップでsysobjectsテーブルを繰り返し処理し、必要なすべてのオブジェクトを体系的に削除できます。

declare tables cursor 
for select name from sysobjects where type='U' 
go 
declare @name varchar(255) 
open tables 
fetch tables into @name 
while (@@sqlstatus = 0) 
begin 
exec("drop table "+ @name) 
fetch tables into @name 
end 
close tables 
deallocate cursor tables 

はい、それはカーソルを必要とし、それがつもりは少し遅くなることだが、それはかなりのデータベースをきれいに拭く必要があります。あなたは PまたはXPを持っており、ループ のドロップ手順 を使用するストアドprocesuresため ループ

  • に タイプ=「U」と使用ドロップテーブルを持っている必要がありますテーブル用

    詳細情報:

  • +0

    "drop table @name"の部分が問題を起こしているので、 "declare"の後ろに "go"を追加しなければなりませんでした。私はそれが働くと答えを受け入れるとすぐに私のスクリプトを投稿します、助けてくれてありがとう、このポストは私にとって非常に教育的でした。 –

    +0

    ヘルプはstackoverflowのためのものです:)上記のスクリプトを変更してより多くのことを手助けするように変更しました。トリガを動的に落とすために欠けている "go"とexecのイディオムが含まれています。 – Jean

    +0

    ジーン、エグゼクティブはトリックをしました。スクリプトは私のために働いて、データベースをきれいに拭きます。私は%s/trigger/table/gでした。 –

    0

    理由だけでスキーマを落とさないでこの

    USE ban_des_rsp1 
    go 
    IF OBJECT_ID('rspman.sp_eliminar_base') IS NOT NULL 
    BEGIN 
        DROP PROCEDURE rspman.sp_eliminar_base 
        IF OBJECT_ID('rspman.sp_eliminar_base') IS NOT NULL 
         PRINT '<<< FAILED DROPPING PROCEDURE rspman.sp_eliminar_base >>>' 
        ELSE 
         PRINT '<<< DROPPED PROCEDURE rspman.sp_eliminar_base >>>' 
    END 
    go 
    create proc rspman.sp_eliminar_base 
    as 
    declare @w_id int, @w_name varchar(255), @w_rowcount int, @w_sql varchar(2000) 
    select @w_id = 0 
    
    set rowcount 0 
    while (@w_id>=0) 
    begin 
    
        set rowcount 1 
        select @w_sql = 'alter table ' + object_name(tableid) + ' DROP CONSTRAINT ' + object_name(constrid) 
        from sysconstraints 
    
        select @w_rowcount = @@rowcount 
        if @w_rowcount<>1 
        begin 
         set @w_id = -1 
        end 
        else 
        begin   
         exec(@w_sql) 
        end 
    
    
    end 
    
    set rowcount 0 
    set @w_id = 0 
    while (@w_id>=0) 
    begin 
    
        set rowcount 1 
        select @w_id = id, @w_name =name 
        from sysobjects 
        where type = 'V' 
         and id > @w_id 
        order by id 
        select @w_rowcount = @@rowcount 
        set rowcount 0 
    
        if @w_rowcount<>1 
         set @w_id = -1 
        else 
        begin   
         if (@w_name like 'gen%' or @w_name like 'vis%') 
         begin 
          select @w_sql = 'drop view ' + @w_name 
          exec(@w_sql) 
         end 
        end 
    
    
    end 
    
    
    
    set rowcount 0 
    set @w_id = 0 
    while (@w_id>=0) 
    begin 
    
        set rowcount 1 
        select @w_id = id, @w_name =name 
        from sysobjects 
        where type = 'U' 
         and id > @w_id 
        order by id 
        select @w_rowcount = @@rowcount 
        set rowcount 0 
    
        if @w_rowcount<>1 
         set @w_id = -1 
        else 
        begin   
         select @w_sql = 'drop table ' + @w_name 
         exec(@w_sql) 
        end 
    end  
    
    set rowcount 0 
    set @w_id = 0 
    while (@w_id>=0) 
    begin 
    
        set rowcount 1 
        select @w_id = id, @w_name =name 
        from sysobjects 
        where type = 'P' 
         and id > @w_id 
        order by id 
        select @w_rowcount = @@rowcount 
        set rowcount 0 
    
        if @w_rowcount<>1 
         set @w_id = -1 
        else 
        begin   
         if @w_name like 'pro%' 
         begin 
          select @w_sql = 'drop proc ' + @w_name 
          exec(@w_sql) 
         end 
        end 
    
    
    
    end 
    go 
    EXEC sp_procxmode 'rspman.sp_eliminar_base', 'unchained' 
    go 
    IF OBJECT_ID('rspman.sp_eliminar_base') IS NOT NULL 
        PRINT '<<< CREATED PROCEDURE rspman.sp_eliminar_base >>>' 
    ELSE 
        PRINT '<<< FAILED CREATING PROCEDURE rspman.sp_eliminar_base >>>' 
    go 
    
    関連する問題