Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перебор строк курсора - можно... поаккуратнее, посовременнее? / 22 сообщений из 22, страница 1 из 1
21.10.2002, 17:29:15
    #32060389
TBB
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
21.10.2002, 17:45:13
    #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
21.10.2002, 18:10:16
    #32060414
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк курсора - можно... поаккуратнее, посовременнее?
И что, все так и пишут один и тот же FETCH по два раза или есть еще какие-нибудь возможности? Поделитесь опытом, пожалуйста.

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

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

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

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

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



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

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

Ну ладно....стиль прграммирования дело каждого...ну так какие проблеммы, заместо @@ERROR заюзай свой флаг и устанавливай его в условии.....и все...вот только зачем так извращаться....дань непонятной моде
...
Рейтинг: 0 / 0
21.10.2002, 18:56:32
    #32060438
TBB
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
21.10.2002, 18:59:25
    #32060440
TBB
TBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк курсора - можно... поаккуратнее, посовременнее?
2 Volhv : Спасибо за подсказки, а то я сначала даже растерялся в этом лесу...

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

Сори, я-то пытался поделится как я енто далаю на TSQL, а тут идет дебат о создание нового расширения к SQL..... сорри не понят.... ретируюсь :))
...
Рейтинг: 0 / 0
21.10.2002, 19:11:44
    #32060444
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк курсора - можно... поаккуратнее, посовременнее?
юкон - следующая версия mssql ...
будет тесно интегрирован с операционкой...
вроде бы даже заменит файловуюсистему....
также тесно интегрирован .Net платформой...
будет специальный релиз Visual Studio .Net for Yukon....
можно будет писать свои функции,триггера,обработчики событий на любом языке поддерживающим платформу .Net
(фактически любой транслятор в msil)
...
Рейтинг: 0 / 0
22.10.2002, 00:12:21
    #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
22.10.2002, 07:25:29
    #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
22.10.2002, 10:17:41
    #32060562
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк курсора - можно... поаккуратнее, посовременнее?
По моему, единственное, что нельзя сделать без курсоров, это вызов процедур.
Если в процедурах зашита хитрая бизнес-логика, то стесняться использовать курсоры не надо. Просто автоматизируйте этот процесс.

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

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

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


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