Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: CL | DM;

Вниз

Неужели циклы в T-SQL так тупо сделаны - неверю...   Найти похожие ветки 

 
Kolan ©   (2006-11-14 22:18) [0]

Здравствуйте,
 Сижу, учусь, делаю лабораторную. Вот пример из нё:

ALTER PROCEDURE Accordance
AS
 DECLARE X CURSOR FOR
   SELECT COUNT(Number) AS AllEmp, Department
   FROM Employee
   GROUP BY Department;
OPEN X
DECLARE @Qty int, @Dept tinyint;
 FETCH NEXT FROM X INTO @Qty, @Dept
 UPDATE Department
   SET EmployeeCount = @Qty
   WHERE Number = @Dept;


WHILE @@FETCH_STATUS = 0
BEGIN
 FETCH NEXT FROM X INTO @Qty, @Dept
 UPDATE Department
   SET EmployeeCount = @Qty
   WHERE Number = @Dept;

END  
CLOSE X
DEALLOCATE X


Моя рука к этому не притрагивалась - только набрал. Работает. Но неужели нельзя организовать цикл так чтобы два раза не писать одно и тоже? Если можно, то как?


 
Johnmen ©   (2006-11-14 22:27) [1]

Для while цикла всегда, не зависимо от языка, нужны разгонные значения. Т.к. он с предусловием.
Поэтому так:

FETCH NEXT FROM X INTO @Qty, @Dept
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE Department
  SET EmployeeCount = @Qty
  WHERE Number = @Dept;
FETCH NEXT FROM X INTO @Qty, @Dept
END  


 
Anatoly Podgoretsky ©   (2006-11-14 22:28) [2]

> Kolan  (14.11.2006 22:18:00)  [0]

Ты форум перепутал, у нас тут по Дельфи.
Сходи лучше на sql.ru там есть специализированый форум по MS SQL
Только не надо говорить, мол я в Дельфи программирую, программируй в чем хочешь, но это дело сервервное.


 
Kolan ©   (2006-11-14 22:46) [3]

Ну вот.. а то препод сбил, блин с толку что тут так надо делать(2 раза) и по другому неполучится.
Благодарю..


 
Kolan ©   (2006-11-14 22:46) [4]

> Только не надо говорить, мол я в Дельфи программирую, программируй
> в чем хочешь, но это дело сервервное.

Дык я же там никого не знаю :)


 
Kolan ©   (2006-11-14 22:47) [5]

Вопросы по базам данных (вопросы по использованию и программированию БД )
Вороде не нарушил правил .

ЗЫ
 А программирую я на Delphi! :)


 
Anatoly Podgoretsky ©   (2006-11-14 22:51) [6]

> Kolan  (14.11.2006 22:46:04)  [4]

Не волнуйся, там люди культурные, не в пример нам.


 
Anatoly Podgoretsky ©   (2006-11-14 22:53) [7]

> Kolan  (14.11.2006 22:47:05)  [5]

Вроде нарушил, это конференция по Дельфи и программирование в ней связаное с базами.
Твой вопрос ничего общего с Дельфи не имеет.
Обычно такие вопросы мы не закрываем, а говорим куда лучше сходить.
И ответ квалифицированый легче получить в специализированой конференции.


 
Kolan ©   (2006-11-14 23:00) [8]

> [7] Anatoly Podgoretsky ©   (14.11.06 22:53)


Ок. Учту :)


 
sniknik ©   (2006-11-14 23:06) [9]

Johnmen ©   (14.11.06 22:27) [1]
ктото тут трюк с GOTO показывал, не будем про то хорошо это или плохо, делает из while аналог repeat until (в одном месте выборку писать, при больших удобноЮ не надо туда сюда копировать)

GOTO Start
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE Department
 SET EmployeeCount = @Qty
 WHERE Number = @Dept;
Start:
FETCH NEXT FROM X INTO @Qty, @Dept
END


 
Johnmen ©   (2006-11-14 23:12) [10]


> sniknik ©   (14.11.06 23:06) [9]


А-а-а... Там и метки ещё есть...:)))


 
Kolan ©   (2006-11-14 23:28) [11]

> sniknik ©   (14.11.06 23:06)

Понятно. Благодарю. :)



Страницы: 1 вся ветка

Текущий архив: 2007.02.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.061 c
3-1163395467
pavel_guzhanov
2006-11-13 08:24
2007.02.04
Как в Interbase вставлять в поле текущую дату?


2-1168579608
VOPROS
2007-01-12 08:26
2007.02.04
Группировка по месяцам на русском


3-1163411219
firebird
2006-11-13 12:46
2007.02.04
Может ли MySQL 5.0.1 оповещать своих клиентов?


2-1168867032
XTD
2007-01-15 16:17
2007.02.04
Редактирование изображения


15-1168528033
iXT
2007-01-11 18:07
2007.02.04
IIS 6 Win2003 Server