輪ごむの空き箱

全テーブルの特定日時以降のデータを削除する


SQL Serverを使って特定日時以降のデータを削除する必要があり、このクエリがとっても役に立った。実際に仕事で使ったときには、特定テーブルのみなのでこのクエリをそのまま使うことはなかった。実際に仕事では、全テーブルでは削除しなかった。
基本的にクエリを実行するためにA5M2というSQLクライアントを使用していたが、このクエリはSQL Server Management Studioを使わないと実行できなかった。

declare t_cursor cursor for
select name from sys.tables

open t_cursor;

declare @Date datetime = '2019/01/01 00:00:00';
declare @UserId uniqueidentifier = '00000000-0000-0000-0000-000000000000';

declare @TableName nvarchar(MAX);

fetch next from t_cursor into @TableName;

while @@FETCH_STATUS = 0
  begin
    declare @Query =
    	'DELETE FROM ' + QUOTENAME(@TableName) +
      ' WHERE CREATED_AT >= @Date AND CREATED_BY = @UserId';
    print '---' + char(13) + @TableName;
    exec sp_executesql @Query, N'@Date datetime, @UserId uniqueidentifier', @Date, @UserId;

    fetch next from t_cursor into @TableName;
  end

close t_cursor;
deallocate t_cursor;