Я хочу обновить столбец Last_Modified
в каждой таблице в данной схеме. Этот столбец обновляется с использованием последней отметки времени, если обновляется другой столбец в той же таблице (ENDTIME
).
Для этого у меня есть следующий скрипт в SQL Server:
DECLARE @TotalRows FLOAT
SET @TotalRows = (SELECT COUNT(*) FROM table1)
DECLARE @TotalLoopCount INT
SET @TotalLoopCount = CEILING(@TotalRows / 100000)
DECLARE @InitialLoopCount INT
SET @InitialLoopCount = 1
DECLARE @AffectedRows INT
SET @AffectedRows = 0
DECLARE @intialrows INT;
SET @intialrows = 1
DECLARE @lastrows INT
SET @lastrows = 100000;
WHILE @InitialLoopCount <= @TotalLoopCount
BEGIN
WITH updateRows AS
(
SELECT
t1.*,
ROW_NUMBER() OVER (ORDER BY caster) AS seqnum
FROM
table1 t1
)
UPDATE updateRows
SET last_modified = ENDTIME AT TIME ZONE 'Central Standard Time'
WHERE last_modified IS NULL
AND updateRows.ENDTIME IS NOT NULL
AND updateRows.seqnum BETWEEN @intialrows AND @lastrows;
SET @AffectedRows = @AffectedRows + @@ROWCOUNT
SET @intialrows = @intialrows + 100000
SET @lastrows = @lastrows + 100000
-- COMMIT
SET @Remaining = @TotalRows - @AffectedRows
SET @InitialLoopCount = @InitialLoopCount + 1
END
ЭтоСценарий определяет количество таблиц, делит их на 100000 и выполняет только столько циклов, чтобы выполнить все обновление. Он разбивает обновление на пакеты / циклы, а затем выполняет обновления для определенных строк, пока не завершит их обновление.
Этот сценарий предназначен только для 1 таблицы, т. Е. Table1. Теперь я хочу изменить этот скрипт таким образом, чтобы он динамически принимал все таблицы в схеме и запускал вышеуказанный скрипт для каждой из них. Допустим, имя схемы - schema1, и в ней 32 таблицы, поэтому этот сценарий должен выполняться для всех этих 32 таблиц.
Я не могу получить таблицы в schema1, но не могу динамически отправить их в эту таблицу. скрипт. Может кто-нибудь помочь мне с этим?