powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перебор строк курсора - можно... поаккуратнее, посовременнее?
22 сообщений из 22, страница 1 из 1
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060389
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, дошла и моя очередь заниматься программированием на стороне сервера. Открываю BOL... Ну что за напасть! Вместо того, чтобы использовать (сейчас я фантазирую) оператор типа
Код: plaintext
1.
FOR EACH ROW FROM TblCursor
или какой-нибудь аналогичный там предлагается вот это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
FETCH NEXT FROM TblCursor 
INTO @TblId, @TblName

WHILE @@FETCH_STATUS =  0 
BEGIN

    --
 
    -- SKIP LOOP STATEMENTS
 
    --
 
   
    -- Get the next row
 
   FETCH NEXT FROM TblCursor1 
   INTO @TblId, @TblName
END

Понимаете о чем я? И что, все так и пишут один и тот же FETCH по два раза или есть еще какие-нибудь возможности? Поделитесь опытом, пожалуйста.
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060403
Volhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
declare @Name varchar(255)
DECLARE cUsers CURSOR FAST_FORWARD READ_ONLY FOR
SELECT distinct [name]
FROM SecirutyTable
OPEN cUsers
WHILE @@ERROR = 0
BEGIN
FETCH NEXT FROM cUsers INTO @Name
IF @@FETCH_STATUS <> 0
BREAK
ELSE
SELECT @Name
END
CLOSE cUsers
DEALLOCATE cUsers
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060414
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что, все так и пишут один и тот же FETCH по два раза или есть еще какие-нибудь возможности? Поделитесь опытом, пожалуйста.

Проектировать схему данных таким образом, чтобы использовать запросы. А курсоры оставить на самый крайний случай.
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060415
Volhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с Глори...сам курсоры не люблю использовать...но реалия жизни такова, что некоторые задачи с помощью них решать легче и быстрее, либо наворачевать более сложную схему данных что не всегда оправдано...а на счет 2х фечтей....пример привел
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060422
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Volhv : Спасибо. Жаль, что начальство очень сильно недолюбливает команды типа BREAK , но в чем-то оно и право... Других возможностей нет? Еще раз спасибо.

2Glory : Может это и есть крайний случай, кто знает... По крайней мере, до сих пор обходились именно запросами, но вот, наконец, уперлись...

Думаю, что хорошо бы научиться использовать промежуточный сервер, реализующий бизнес-правила, но это уже не раньше, чем в следующем году.
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060423
Volhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странное какое-то начальство....а как еще из цикла выходить до его завершения???
Не ну ГОТУ не любить...это я еще понемаю (хотя на TSQL без него трудно...и не надо меня пинать), но BREAK...это же нормально....странно.....
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060427
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и-эх....
ждем дружно юкон.....
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060428
Volhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего ждем??
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060433
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как еще из цикла выходить до его завершения???

Цикл переиначиваем и, например, укладываем всю логику в флаги и операторы IF ... Но FOR EACH был бы элегантнее, все же.

Внешнее условие остается примерно таким:
Код: plaintext
1.
2.
3.
4.
WHILE Flag
BEGIN
    -- ...
 
END



ждем дружно юкон.....

Подробнее можно?
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060434
Volhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
))

Ну ладно....стиль прграммирования дело каждого...ну так какие проблеммы, заместо @@ERROR заюзай свой флаг и устанавливай его в условии.....и все...вот только зачем так извращаться....дань непонятной моде
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060438
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начальство никогда не бывает неправым полностью, причем уровень типа "потому что сегодня болит зуб" у моего начальства почти недостижим, обычно присутствуют несколько более весомые причины. Вы Дейкстру, к примеру, изучали? Мое начальство - изучало...

Опять же, такой текст многим может показаться даже более удобочитаемым, чем с БРЕЙКОМ.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
@Flag = (@@ERROR =  0 )
WHILE @Flag
BEGIN 
  FETCH NEXT FROM cUsers INTO @Name 
  @Flag = (@@FETCH_STATUS <>  0 )
  IF @Flag 
	  -- ... SKIPPED LOOP STATEMENTS
 
END

(Здесь могут быть мои ошибки, поправьте тогда, если обнаружите)
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060440
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Volhv : Спасибо за подсказки, а то я сначала даже растерялся в этом лесу...

Всем пока!
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060442
Volhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ПОНЯЛ :)

Сори, я-то пытался поделится как я енто далаю на TSQL, а тут идет дебат о создание нового расширения к SQL..... сорри не понят.... ретируюсь :))
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060444
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
юкон - следующая версия mssql ...
будет тесно интегрирован с операционкой...
вроде бы даже заменит файловуюсистему....
также тесно интегрирован .Net платформой...
будет специальный релиз Visual Studio .Net for Yukon....
можно будет писать свои функции,триггера,обработчики событий на любом языке поддерживающим платформу .Net
(фактически любой транслятор в msil)
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060495
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все эти варианты - кака.
Надо вот как:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
DECLARE
   @a_id INT
  ,@a_fld CHAR( 10 )

CREATE TABLE #a (
   a_id INT IDENTITY( 1 , 1 ) NOT NULL PRIMARY KEY CLUSTERED
  ,a_fld CHAR( 10 )
)

INSERT INTO #a SELECT * FROM b

SELECT @a_id =  0 

WHILE  1 = 1 
BEGIN
  SELECT
     @a_id = a_id
    ,@a_fld = a_fld
  FROM #a
  WHERE a_id > @a_id

   /* Do all that important stuff here */ 
END

DROP TABLE #a
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060516
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Gobzo Kobler:
Мне кажется, здесь должен быть TOP 1

Код: plaintext
1.
2.
3.
4.
SELECT TOP  1 
     @a_id = a_id,
    @a_fld = a_fld
  FROM #a
  WHERE a_id > @a_id


Можно еще для перестраховки добавить ORDER BY a_id
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060562
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему, единственное, что нельзя сделать без курсоров, это вызов процедур.
Если в процедурах зашита хитрая бизнес-логика, то стесняться использовать курсоры не надо. Просто автоматизируйте этот процесс.

На что влияет лишняя строчка кода?
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060565
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Volhv
Fast_Forward по умолчанию Read_Only
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32060572
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Volhv
Fast_Forward по умолчанию Read_Only
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32061279
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно. Спасибо.
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32061632
DImanch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4ТВВ: Ну я читал Дейкстру:). А чем, скажите, вас не устроил BREAK. Он нисколько не противоречит структурному программированию. Так же как и CASE с FOR в С++. Насколько я помню, Дейкстра так и говорил, что вполне допустимо расширение простого множества WHILE и IF. Приведенный пример, во всяком случае, удовлетворяет требованиям структурного программирования.
...
Рейтинг: 0 / 0
Перебор строк курсора - можно... поаккуратнее, посовременнее?
    #32061635
Фотография TBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не сказал, что BREAK не устроил именно меня.

Мое же начальство на эту тему спрашивать совсем не охота. Хорошо еще, что оно позволяет ИНОГДА использовать WHILE с условием после текста цикла, да и то - не часто.

:D
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перебор строк курсора - можно... поаккуратнее, посовременнее?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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