Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос в MSSQL [D6, MSSQL]


DA ©   (2004-08-23 17:59:00) 

sql_string:='select ltb_sessions.sid,ltb_loadparams.name,'+
   'if((ltb_loadparams.RowsCnt>ltb_loadparams.WORKACTS) or '+
   '(ltb_loadparams.RowsLinkCnt>ltb_loadparams.WORKLINKS),'+
   '''Не завершена'',''Завершена'') as LoadState, ltb_sessions.starttime, '+
   'ltb_sessions.fintime, ltb_users.displayname,ltb_sessions.userid '+
   ' from ltb_sessions, ltb_loadparams,ltb_users '+
   ' where ltb_sessions.sid=ltb_loadparams.sid and ltb_sessions.userid=ltb_users.userid and ltb_sessions.stype=1 ORDER BY Sid DESC';


В MySql такой запрос отрабатывает нормально, в MSSQL валится, подскажите, где ошибка


Ega23   (2004-08-24 18:16:00) [1]

На первый взгляд, вот это:   :VALUE
Параметр поставил?


DA   (2004-08-24 17:54:00) [2]

Спасибо!
Помогите еще с одним запросом, если нетрудно.Заранее благодарен.

UPDATE ltb_docs SET VALUE=:VALUE,TEXTSIZE='+IntToStr(len_text)+' WHERE CODE='+IntToStr(id_code)

Ошибка где-то около TEXTSIZE :)


сергей1   (2004-08-24 10:08:00) [3]

согласен, просто МОА так написал ...


Ega23   (2004-08-24 09:50:00) [4]

2 сергей1   (24.08.04 09:39) [6]

Но не в конструкции Select:

IF Boolean_expression
   { sql_statement | statement_block }
[ ELSE
   { sql_statement | statement_block } ]


сергей1   (2004-08-24 09:39:00) [5]

в T-SQL есть оператор if-then


Skyle   (2004-08-24 09:38:00) [6]


> [4] Ega23 ©   (24.08.04 09:26)

Согласен ;-)


Ega23   (2004-08-24 09:26:00) [7]

Подозреваю, что правильнее будет сделать несколько наоборот.
CASE...END AS LoadState.
Так больше похоже на то, чего автор вопроса хотел.


Это по ANSI SQL правилам. А диалект T-SQL разрешает конструкцию LoadState=CASE... Автор же на T-SQL пишет...


Skyle   (2004-08-24 06:31:00) [8]


> LoadState= CASE ... END

Подозреваю, что правильнее будет сделать несколько наоборот.
CASE...END AS LoadState.
Так больше похоже на то, чего автор вопроса хотел.


Ega23   (2004-08-23 18:29:00) [9]


select S.sid, P.name,
LoadState= CASE
  when ((P.RowsCnt>P.WORKACTS) or (P.RowsLinkCnt>P.WORKLINKS))
  then 'Не завершена' else  'Завершена' end,
S.starttime, S.fintime, U.displayname, S.userid
from ltb_sessions S, ltb_loadparams P, ltb_users U
where S.sid=P.sid and S.userid=U.userid and S.stype=1
ORDER BY Sid DESC


Вроде так


MOA   (2004-08-23 18:20:00) [10]

В MS SQL нет функции if.
Необходимо либо переформулировать запрос (на первый взгляд - это можно сделать), либо используйте CASE
Удачи!


Наверх

Титульная страница Поиск, карта сайта Написать письмо