1

データベースからさまざまなステートメントを生成するスクリプトを書きたいと思います。

何かのようなもの :

select 'DROP TABLE ['+ name + ']' from sys.objects where type = 'T' ;

そのようなステートメントのすべての出力を新しいファイルに自動的に収集してから、このファイルを実行したいと考えています。これは可能ですか?

重要:もちろん、出力にはヘッダーがなく、その他のエラー/成功、メッセージなどが含まれていない必要があります。

最適なケースでは、これに必要なすべてのオプションは、ユーザー インターフェイスで設定する以外に、スクリプト自体で設定する必要があります。

4

2 に答える 2

4

まず、次のような動的スクリプトを作成します...

DECLARE @sql NVARCHAR(MAX)  
SELECT @sql = 
     COALESCE(@sql + CHAR(13), '') + 
     'DROP TABLE ['+ name + ']' 
FROM sys.objects 
WHERE [type] = 'T'

それを実行...

EXEC(@sql)

次に、それをメッセージウィンドウに出力します...

PRINT @sql

そして最後にメッセージウィンドウに行き、それを右クリックし、「結果を名前を付けて保存...」を選択し、ファイルの種類>すべてのファイルを保存し、myfile.sqlのようなファイル名を書きます

編集

私は、このようなことをトランザクションなしで自動的に実行することは絶対にありません。メッセージウィンドウからスクリプトを保存し、それを開いて確認してから実行したいと思います。

于 2013-06-20T11:26:43.333 に答える
2

このようなものが欲しいですか?

osqlスクリプトの使用とスクリプトを次のように印刷するだけの場合

DECLARE @schema VARCHAR(255)
DECLARE @table VARCHAR(255)

DECLARE PrintOutputCursor CURSOR LOCAL FAST_FORWARD FOR
    SELECT [TABLE_SCHEMA], [TABLE_NAME]
    FROM INFORMATION_SCHEMA.TABLES
OPEN PrintOutputCursor
FETCH NEXT FROM PrintOutputCursor INTO @schema, @table
WHILE @@FETCH_STATUS = 0 BEGIN
    PRINT 'DROP TABLE ['+ @schema + '].[' + @table + '];'
    FETCH NEXT FROM PrintOutputCursor INTO @schema, @table
END
CLOSE PrintOutputCursor
DEALLOCATE PrintOutputCursor

このスクリプトを使用してスクリプトを実行する場合osql(非推奨)

DECLARE @schema VARCHAR(255)
DECLARE @table VARCHAR(255)
DECLARE @exec VARCHAR(4000)

DECLARE PrintOutputCursor CURSOR LOCAL FAST_FORWARD FOR
    SELECT [TABLE_SCHEMA], [TABLE_NAME]
    FROM INFORMATION_SCHEMA.TABLES
OPEN PrintOutputCursor
FETCH NEXT FROM PrintOutputCursor INTO @schema, @table
WHILE @@FETCH_STATUS = 0 BEGIN
    SET @exec = 'DROP TABLE ['+ @schema + '].[' + @table + '];'
    -- Uncomment the following to execute the dynamic statement
    -- EXEC (@exec)
    FETCH NEXT FROM PrintOutputCursor INTO @schema, @table
END
CLOSE PrintOutputCursor
DEALLOCATE PrintOutputCursor
于 2013-06-20T10:54:53.533 に答える