Wagomu no Akibako

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


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;