Главная страница
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.102 c
2-1169270058
22b
2007-01-20 08:14
2007.02.04
XML := CreateOleObject( Microsoft.XMLDOM ) как корректно снять?


3-1163509197
Leshiy
2006-11-14 15:59
2007.02.04
Использование Group by с полями типа BLOB


8-1148658042
Алексей89
2006-05-26 19:40
2007.02.04
Выполнить выделение кажд. единицы одинакового кванта времени


2-1169152077
sinys
2007-01-18 23:27
2007.02.04
Почему-то происходит пересоздание формы


8-1149685999
pm
2006-06-07 17:13
2007.02.04
VideoWindow не на главной форме