Неверный синтаксис рядом с ключевым словом «начало» - PullRequest
0 голосов
/ 20 мая 2011

Я пытаюсь удалить большое количество строк из таблицы и не допустить одновременного создания слишком большого журнала транзакций. Похоже, что большинство людей в Интернете рекомендуют использовать заявление BEGIN TRAN / COMMIT TRAN. Я не очень разбираюсь в SQL, поэтому я просто попытался перевести phseudocode в ms sql (SQL Server 2005). Вот код:

set rowcount 1000
while (1=1)
BEGIN
    with MonthEndDates as (
        select max(Rundate) MonthEnd
        from table3
        group by convert(varchar(6), RunDate, 112)) 
    begin transaction T1
    delete from table1 where
    table2id in
    (select table2id from table2 where
    table3id in
    (select table3id from table3
    where RunDate < getdate()-30
    and RunDate not in (select MonthEnd from MonthEndDates)))
    commit transaction T1
    if @@rowcount = 0
    break
END
set rowcount 0

Я все правильно делаю? Если да, почему я получаю эту ошибку: Неверный синтаксис рядом с ключевым словом «начало». Я также попытался удалить метки транзакции, но это не помогло

Как я уже сказал, я не очень хорош в SQL, поэтому любая помощь будет признательна

Спасибо

1 Ответ

1 голос
/ 20 мая 2011
set rowcount 1000
while (1=1)
BEGIN
    begin transaction T1

    --The CTE goes with the DELETE
    ;with MonthEndDates as (
        select max(Rundate) MonthEnd
        from table3
        group by convert(varchar(6), RunDate, 112)) 
        delete from table1 where
    table2id in
    (select table2id from table2 where
    table3id in
    (select table3id from table3
    where RunDate < getdate()-30
    and RunDate not in (select MonthEnd from MonthEndDates)));

    commit transaction T1
    if @@rowcount = 0
    break
END
set rowcount 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...