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

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

Помогите найти ошибку в запросе СРОЧНО [D5, MSSQL]


СергейКнязев ©   (2002-02-06 11:48:00) 

update Prices
set price_opt_4=pn.price_opt_4

from Prices p, NewPriceS pn

where p.prodname=pn.prodname
and p.manf_name=pn.manf_name
and p.row=4

На строке с From дает ошибку.
Че не правильно не пойму.


СергейКнязев   (2002-02-07 08:05:00) [1]

Ладно НАРОД хватит мучиться, я перевожу локальные таблицы на сервер. И изначальный запрос там работает нормально.

СПАСИБО ВСЕМ, КТО ПРИНЯЛ УЧАСТИЕ В РЕШЕНИЕ МОЕЙ ПРОБЛЕМЫ.

P.S. Для Alex-A. Твой запрос проапдейтит все записи и вставит туда максимальное значение из второй таблицы, а это не то, что надо.
Для YaJohn. Osobaya blagodarnost vam za moy slomaniy i zagipsovaniy teper" yazik.


Alex-A   (2002-02-07 06:42:00) [2]

2СергейКнязев
Попробуй так:
UPDATE Prices
SET price_opt_4=(SELECT MAX(price_opt_4)
FROM NewPrices pn
WHERE pn.prodname=prodname and
pn.manf_name=manf_name
)
WHERE Row=4

не уверен, что это правильно, но проверить сам не имею возможности.
если проверишь - сообщи, pls!


MetallAdm   (2002-02-06 18:17:00) [3]

Ну Незнаю я Почти такой пример для себя зделал все работает


СергейКнязев   (2002-02-06 17:54:00) [4]

Объясняю для yaJohn:
У меня в двух локальных таблицах лежат прайс-листы
в PriceS лежат несколько прайсов, в NewPriceS лежит новый прайс с новыми ценами. Надо в таблице PriceS изменить цены на те позиции у которых prodname из PriceS равен prodname из NewPriceS и manf_name аналогично. То есть взять цены из NewPriceS и обновить цены на аналогичный товар из PriceS. На последнюю строку "and row=4" можно не смотреть.

Спасибо за внимание.


yaJohn   (2002-02-06 17:18:00) [5]

>твой запрос не работает даже в таком виде возвращается много записей на одно поле, которое апдейтится
Nu ya je ne znau, chto u tebia v baze lejit...
update Prices
(select pn.price_opt_4
from Prices p, NewPriceS pn
where p.prodname=pn.prodname
and p.manf_name=pn.manf_name
and p.row=4
)

Videlenoe uslovie doljno otbirat" strogo ODNU zapis". Kakuu imenno - zavisit ot logoki programmi...

>Таким образом проапдейтятся ВСЕ значения Price.price_opt_4 одним и тем же значением. если я не прав - поправь pls!
Nu da... A razve ne eto trebovalos"? %)
2 СергейКнязев
Sformuliruyte plzs zadachu pokonkretnee... Chto doljno obnovliatsia i otkuda?


MetallAdm   (2002-02-06 16:35:00) [6]

а нелзя ли продекларировать переменные запихать в них что нужно
по условию
и апгрейдить тадличку ??

или я что то не так понял ??


СергейКнязев   (2002-02-06 16:25:00) [7]

Люди я ведь не шучу, очень надо пожалуйста


Alex-A   (2002-02-06 15:30:00) [8]

2yaJohn:Таким образом проапдейтятся ВСЕ значения Price.price_opt_4 одним и тем же значением.
если я не прав - поправь pls!


СергейКнязев   (2002-02-06 15:25:00) [9]

yaJohn, твой запрос не работает даже в таком виде возвращается много записей на одно поле, которое апдейтится, а нужно проапдейтить все строки удовлетворяющие заданному условию.
Если не сложно напиши свой агрегат.
Заранее благодарен.


yaJohn   (2002-02-06 15:13:00) [10]

Perechitay moy otvet.


СергейКнязев   (2002-02-06 15:00:00) [11]

Ну а как проапдейтить все поля локальной таблички ссылаясь на другую локальную


Alex-A   (2002-02-06 14:27:00) [12]

Возможно дело в том, что пока таблицы локальные, но для них определен Alias с типом STANDART (парадоксовские таблицы)
Ну тогда, конечно, прав Val!
Этот запрос будет выполняться только на сервере MSSQL!


СергейКнязев   (2002-02-06 13:31:00) [13]

От диалекта я не отошел в справке по Query Analyzer из MSSQL 7.0 есть такой пример и он написано работает (лажу ведь не подсунут).

Ошибка следующая:
Invalid use of keyword
Token: from
Line Number: 4

Возможно дело в том, что пока таблицы локальные, но для них определен Alias с типом STANDART (парадоксовские таблицы)


AlexSV   (2002-02-06 13:18:00) [14]

На вскидку: для таблицы под update в from надо указывать имя таблицы без алиаса:

update Prices
set price_opt_4=pn.price_opt_4

from Prices, NewPriceS pn

where Prices.prodname=pn.prodname
and Prices.manf_name=pn.manf_name
and Prices.row=4

Если не поможет, то дай больше информации, желательно на Mail.


Val   (2002-02-06 12:57:00) [15]

Приношу свои извинения СергейКнязев, все таки очень уж отошли от стандарта в данном диалекте..


Alex-A   (2002-02-06 12:25:00) [16]

2Val
с точки зрения диалекта Transact-SQL все абсолютно правильно


Alex-A   (2002-02-06 12:17:00) [17]

Как ошибка-то выглядит?
Синтаксис вроде правильный у меня аналогичный запрос ошибку не возвращает.


Val   (2002-02-06 12:03:00) [18]

извините, но у вас полная чушь написана или диалект MSSQL очень отличаетмся от стандарта, в чем я сомневаюсь.
врядли есть такая конструкция: update..set...from
обычно делают выборку-select..from и берут из нее данные для update, если не используют явных значений.


yaJohn   (2002-02-06 12:02:00) [19]

imelos" v vidu:
update Prices
set price_opt_4=
( selectpn.price_opt_4
from Prices p, NewPriceS pn
where p.prodname=pn.prodname
and p.manf_name=pn.manf_name
and p.row=4)


Esli ya ne prav - obiasnite, chto doljno poluchitsia.
Mda, vnutrenniy zapros doljen vozvrashat" strogo odnu zapis". Poetomu luchshe (no ne obiazatel"no) ispol"zovat" agregati.


Наверх

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