SQL Server - @@ RowCount автоматически фиксирует транзакцию? - PullRequest
0 голосов
/ 29 октября 2018

Я проверяю скрипт разработчика, чтобы удалить все данные из большой таблицы, которая старше указанной даты.

SET @R = 1;
WHILE @R > 0
    BEGIN
        ----Begin Transaction
        DELETE TOP (100000) FROM
        TBL_MYTABLE
        WHERE dateCreated < @DELETEDATE;

        ----Commit Transaction;
        SET @R = @@ROWCOUNT;

    END;

Одна вещь, которая мне показалась, заключается в том, что он проверяет значение @@ ROWCOUNT, ничего не делая с переменной @R. Этот оператор автоматически фиксирует транзакцию? Или весь цикл WHILE должен завершиться первым?

РЕДАКТИРОВАТЬ: В качестве дополнительного вопроса, как я могу определить, является ли каждая итерация цикла совершается, или он ждет до конца?

1 Ответ

0 голосов
/ 29 октября 2018

Короткий ответ: нет, это не так. потому что нет COMMIT TRANSACTION ключевое слово

Образец данных для пакетного удаления.

Вот пример, который мы можем видеть, я устанавливаю BREAK;, когда T количество меньше или равно 2.

Когда он выходит из цикла, мы выбираем данные из T, мы видим только две строки.

CREATE TABLE T(
    i int

);
INSERT INTO T values (1);
INSERT INTO T values (2);
INSERT INTO T values (3);
INSERT INTO T values (4);
INSERT INTO T values (5);

DECLARE @R INT = 1
SET @R = 1;
WHILE @R > 0
    BEGIN

        DELETE TOP (1) 
        FROM T


        SET @R = @@ROWCOUNT;

        IF((SELECT COUNT(*) FROM T)<= 2)
          BREAK;

END;

SELECT * FROM T

sqlfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...