SQL Server SQL文データベースを空にします(スキーマを含む場合)

875 ワード

最近SQL Serverの関連業務を処理して、SQL文を使ってデータベースを整理する必要があって、不思議な現象に出会って、一部のデータベースは意外にも空になって成功しないで、エラーのヒントは以下の通りです:表'xxx'に対して削除を実行することができなくて、それは存在しないため、あるいはあなたは必要な権限がありません.
最後に、データベースにアーキテクチャが使用されていることを発見し、テーブル名に直接基づいて削除できないため、削除するにはテーブルペアのアーキテクチャを取得し、削除文:drop table[アーキテクチャ名]を呼び出す.表名
最後に、現在のコンピテンシーに基づいて、データベースを空にするSQL構文をまとめました.
declare @sql varchar(8000)

while (select count(*) from sysobjects where type = 'U') > 0
begin
    select @sql='drop table [' + A.ownname + '].' + [A.name]
    from
    (
        select schema_id, name,ownname=schema_name(schema_id)  from sys.tables
    )
    A FULL JOIN(
        select name from sysobjects WHERE (type = 'U')
    )B
    on A.name=B.name
    ORDER BY 'drop table [' + A.ownname + '].' + [A.name]
    exec(@sql)
end

後期に改善の方法があれば、その時になってから変更します.