Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ребята, вопрос про циклы. / 11 сообщений из 11, страница 1 из 1
14.02.2018, 12:01
    #39601676
Колян Козлов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
Добрый день,

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



Сейчас делаю так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
WHILE ((SELECT COUNT(*) FROM table WHERE id=1)>0)
BEGIN
PRINT 'таки удаляю...';
BEGIN TRANSACTION
DELETE TOP (100000)
FROM table
WHERE id=1 ;
commit;
END




Но SSMS не пишет никаких сообщений пока выполняется цикл.

Т.е. тупо сидишь и смотришь в монитор в сообщения - а там пусто.

Собощения появляются только когда либо цикл завершился, либо когда нажимаю "стоп" на запросе.




Как получать актуальную информацию о процессе выполнении цикла?
...
Рейтинг: 0 / 0
14.02.2018, 12:04
    #39601680
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
Колян Козлов, RAISERROR (N'таки удаляю...', 0, 1) WITH NOWAIT
...
Рейтинг: 0 / 0
14.02.2018, 12:12
    #39601693
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
Колян Козлов,

я предпочитаю что-то типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DECLARE @R INT
WHILE 1 = 1
BEGIN

	DELETE TOP (100000)
	FROM #table
	WHERE id=1 ;
	
	SET @R = @@ROWCOUNT
	
	IF @R = 0 
		BREAK

	RAISERROR (N'таки удаляю... %d', 0, 1,@R) WITH NOWAIT
END
...
Рейтинг: 0 / 0
14.02.2018, 12:20
    #39601700
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
Код: sql
1.
2.
Del: DELETE TOP(100000) #table WHERE id=1;
IF @@ROWCOUNT>0 GOTO Del;
...
Рейтинг: 0 / 0
14.02.2018, 12:28
    #39601707
Колян Козлов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
Ребята, большое спасибо!
...
Рейтинг: 0 / 0
14.02.2018, 12:30
    #39601709
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
iap,

и без меток :)

Код: sql
1.
2.
SELECT NULL 
WHILE @@ROWCOUNT>0 DELETE TOP(100000) #table WHERE id=1;
...
Рейтинг: 0 / 0
14.02.2018, 12:41
    #39601717
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
TaPaKiap,

и без меток :)

Код: sql
1.
2.
SELECT NULL 
WHILE @@ROWCOUNT>0 DELETE TOP(100000) #table WHERE id=1;

И куда NULL вылезет?
...
Рейтинг: 0 / 0
14.02.2018, 12:45
    #39601722
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
iap,

ну надо ж как-то толкнуть @@ROWCOUNT
...
Рейтинг: 0 / 0
14.02.2018, 12:48
    #39601727
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
TaPaKiap,

ну надо ж как-то толкнуть @@ROWCOUNTВот из-за этого-то я и подумал несколько лет назад, что лучше @@ROWCOUNT проверять после операции, - и прыгать в начало в случае чего!
А что, GOTO сильно смущает? Это мой любимый оператор со времён FORTRANа!
...
Рейтинг: 0 / 0
14.02.2018, 12:49
    #39601731
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
iapTaPaKiap,

ну надо ж как-то толкнуть @@ROWCOUNTВот из-за этого-то я и подумал несколько лет назад, что лучше @@ROWCOUNT проверять после операции, - и прыгать в начало в случае чего!
А что, GOTO сильно смущает? Это мой любимый оператор со времён FORTRANа!

та не, в sql он точно никогда не смущает :)
...
Рейтинг: 0 / 0
14.02.2018, 13:14
    #39601744
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ребята, вопрос про циклы.
И куда NULL вылезет?

можно и без паразитного селекта :)

Код: sql
1.
2.
declare @x int = 0;
while @@rowcount > 0 DELETE TOP (100000) FROM table;
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ребята, вопрос про циклы. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]