Выполнить один и тот же запрос для нескольких таблиц без динамического SQL

Я поддерживаю базу данных SQL для стороннего программного пакета. У них есть много того, что они называют «теневыми таблицами», на самом деле просто таблицы аудита. Это все хорошо, но их система не очищает эти таблицы, поэтому я должен это сделать. Они также добавляют новые «Таблицы теней» без уведомления при каждом обновлении. Старый способ очистки таблиц был с длинным спискомDELETE FROM заявления, но этот список стал очень длинным и трудно поддерживать.

Чтобы упростить поддержку процесса очистки и автоматически перехватывать новые «теневые таблицы», я написал следующую хранимую процедуру. Хранимая процедура работает, но я бы предпочел найти способ без использования курсора и динамических запросов, так как он будет ежедневно выполняться для множества разных таблиц. Есть ли альтернативный способ сделать это без использования курсора и динамических запросов?

DECLARE @workingTable varchar(128);
DECLARE @sqlText varchar(250);
DECLARE @CheckDate DATETIME = DATEADD(yy, -2, GETDATE());

DECLARE curKey SCROLL CURSOR FOR  
SELECT name AS TableName
FROM dataTEST.sys.tables
WHERE (name like '%[_]h' OR name like '%[_]dh')
ORDER BY name

OPEN curKey
WHILE @@fetch_status = 0
BEGIN
    FETCH NEXT FROM curKey INTO @workingTable
    SET @sqlText = 'DELETE FROM DataTEST.dbo.' + @workingTable + ' WHERE LAST_MOD < ''' + CONVERT(CHAR(10), @CheckDate, 101) + ''';'
    --PRINT @sqlText
    EXEC (@sqlText)
END
CLOSE curKey
DEALLOCATE curKey

Ответы на вопрос(3)

Ваш ответ на вопрос