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

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

Ниже мой сценарий. Я объявляю удаленную переменную участников, затем использую функцию rand() для генерации случайного числа, которое затем использую в своем операторе удаления, используя CTE и устанавливая номер строки. Это работает для первой кампании, но не для остальных, хотя когда я смотрю на оператор печати, он показывает сгенерированное случайное число.

DECLARE @CampaignID INT
SET @CampaignID = 1

WHILE @CampaignID <= 1000
    BEGIN
        DECLARE @AttendeesDeleted INT

        SELECT @AttendeesDeleted = ROUND(RAND() * 10000, 0)

        ;WITH attendees AS (
            SELECT  *,
                    ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY  CampaignAttendeeID) AS rn
            FROM Warehouse.CampaignAttendees
        )
        DELETE
        FROM attendees 
        WHERE rn > @AttendeesDeleted
        AND CampaignID = @CampaignID

        PRINT 'Attendees Deleted: ' + CAST(@AttendeesDeleted AS VARCHAR)
            
        SET @CampaignID = @campaignID + 1
    END

Нужно ли мне создать сценарий случайного выбора как функцию, а затем запустить его как функцию?

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

Вам необходимо объяснить, что означает «не работает». Примеры данных очень помогут.

topsail 13.04.2024 23:24

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

William Gitu 13.04.2024 23:45

Спасибо, Питер. Это сделало свое дело

William Gitu 13.04.2024 23:52
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Часть WHERE CampaignID = @CampaignID принадлежит оператору SELECT, а не оператору DELETE.

В результате этого изменения ROW_NUMBER() будет рассчитываться для строк, принадлежащих кампании, а не для всех строк в таблице.

Другие вопросы по теме