where句でループを使用する方法を理解しようとしています。過去 7 日間のファイル名のみが必要なこのコードがあります。これまでのところ機能しています。コードをより動的/より良くしたかっただけです:)
select a, b
from data1
where a in 
(
  'File_'+CAST(YEAR(GETDATE()-1)*10000+MONTH(GETDATE()-1)*100+DAY(GETDATE()-1) 
      AS VARCHAR)+'.TXT'
, 'File_'+CAST(YEAR(GETDATE()-2)*10000+MONTH(GETDATE()-2)*100+DAY(GETDATE()-2) 
      AS VARCHAR)+'.TXT'
, 'File_'+CAST(YEAR(GETDATE()-3)*10000+MONTH(GETDATE()-3)*100+DAY(GETDATE()-3) 
      AS VARCHAR)+'.TXT'
, 'File_'+CAST(YEAR(GETDATE()-4)*10000+MONTH(GETDATE()-4)*100+DAY(GETDATE()-4) 
      AS VARCHAR)+'.TXT'
, 'File_'+CAST(YEAR(GETDATE()-5)*10000+MONTH(GETDATE()-5)*100+DAY(GETDATE()-5) 
      AS VARCHAR)+'.TXT'
, 'File_'+CAST(YEAR(GETDATE()-6)*10000+MONTH(GETDATE()-6)*100+DAY(GETDATE()-6) 
      AS VARCHAR)+'.TXT'
, 'File_'+CAST(YEAR(GETDATE()-7)*10000+MONTH(GETDATE()-7)*100+DAY(GETDATE()-7) 
      AS VARCHAR)+'.TXT'
)
order by a
ファイル名は File_YYYYMMDD.txt です。
私は他の場所を検索し、ループについて少し読みましたが、私が理解できたのは次のようなものだけでしたが、うまくいきません:
DECLARE @i int = 0
WHILE @i < 7 BEGIN
    SET @i = @i + 1
END
select a, b
from data1
where a in 
(
  'File_'+CAST(YEAR(GETDATE()-@i)*10000+MONTH(GETDATE()-@i)*100+DAY(GETDATE()-@i) 
     AS VARCHAR)+'.TXT'
)
order by a