
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
16.08.2002, 18:24:20
|
|||
|---|---|---|---|
|
|||
Сложный запрос без курсоров? |
|||
|
#18+
У меня такой вопрос: есть табличка t_rest (Сток), есть таблица t_OrderItems(Строки Накладной), мне нужно написать запрос который бы обновлял табл Сток или добавлляет данные в неё данные в зависимости от наличия совпадений с таблицей t_OrderItems (если совпадений нет то добавляет, а если есть то обновляет), как сделать это при помощи SQL? Я написал такой запрос, но он не работает что то.. insert into t_rest select * from t_OrderItems where t_OrderItems.OrderId=18 and t_rest.NameId not in (select NameId from t_OrderItems where OrderId=18) and t_rest.Invoice not in (select Invoice from t_OrderItems where OrderId=18) update t_rest set t_rest.Qnty=t_rest.Qnty-t_OrderItems.Qnty from t_OrderItems where t_OrderItems.OrderId=18 and t_rest.NameId=t_OrderItems.NameId and t_rest.invoice=t_OrderItems.Invoice and t_rest.Qnty>=t_OrderItems.Qnty Server: Msg 107, Level 16, State 3, Line 1 The column prefix 't_rest' does not match with a table name or alias name used in the query. Server: Msg 107, Level 16, State 1, Line 1 The column prefix 't_rest' does not match with a table name or alias name used in the query. (Часть запроса для обновления работает) Может есть у кого какие мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2002, 18:40:58
|
|||
|---|---|---|---|
Сложный запрос без курсоров? |
|||
|
#18+
похоже у тебя нет такой таблицы t_rest ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2002, 18:43:07
|
|||
|---|---|---|---|
|
|||
Сложный запрос без курсоров? |
|||
|
#18+
go DECLARE @Qnty int, @NameId Int SET @Qnty=0 SET @NameId =0 SELECT TOP 1 @NameId =t_OrderItems.NameId @Qnty=t_OrderItems.Qnty FROM t_OrderItems WHERE (t_OrderItems.OrderId=18) ORDER BY t_OrderItems.NameId WHILE @@rowcount > 0 BEGIN -- здесь пишешь свой код изменения остатков, используя переменные @Qnty и @NameId SELECT TOP 1 @NameId =t_OrderItems.NameId @Qnty=t_OrderItems.Qnty FROM t_OrderItems WHERE (t_OrderItems.OrderId=18) AND (t_OrderItems.NameId >@NameId ) ORDER BY t_OrderItems.NameId END go Должно работать быстрее курсора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2002, 18:51:52
|
|||
|---|---|---|---|
|
|||
Сложный запрос без курсоров? |
|||
|
#18+
Не очень надежно вызывать @@rowcount в такой ответственной вещи как изменене стока (мне так кажется), некоторые тригеры во время своей работы изменяют эту переменную.. Мне интересно где в моем запросе ошибка, он теоритически должен работать -)) Но почему то не работает.. А табличка t_rest там есть, так как вторая часть заброса отрабатывает нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2002, 18:55:46
|
|||
|---|---|---|---|
Сложный запрос без курсоров? |
|||
|
#18+
Не, TSQL так не апдэйтит. Нужно делать примерно так: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2002, 18:57:24
|
|||
|---|---|---|---|
Сложный запрос без курсоров? |
|||
|
#18+
Я не понимаю синтаксиса твоего первого запроса по вставке. Насколько я знаю, синтаксис должен быть таким: INSERT INTO <куда вставляем> SELECT <что вставляем> Каким боком в подзапрос заехало имя таблицы в которую идет вставка? Нет, конечно, использовать ее можно, но тогда, как мне кажется, ее следует повторно указать в источниках для подзапроса. Т.е. примерно так: INSERT INTO t_rest SELECT ... FROM t_OrderItems,t_rest ... И как-то связать таблицы t_OrderItems,t_rest (возможно по JOIN) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2002, 19:17:13
|
|||
|---|---|---|---|
|
|||
Сложный запрос без курсоров? |
|||
|
#18+
Торможу товарищи я под вечер -)) insert into t_rest (Qnty, NameId,ScladID,officeid,invoice) select Qnty,NameId, 17,1,Invoice from t_OrderItems where t_OrderItems.OrderId=18 and t_OrderItems.Invoice not in (select invoice from t_rest ) update t_rest set t_rest.Qnty=t_rest.Qnty-t_OrderItems.Qnty from t_OrderItems where t_OrderItems.OrderId=18 and t_rest.NameId=t_OrderItems.NameId and t_rest.invoice=t_OrderItems.Invoice and t_rest.Qnty>=t_OrderItems.Qnty Заработало. Хотя мне эта конструкция не нравится.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2002, 19:19:10
|
|||
|---|---|---|---|
|
|||
Сложный запрос без курсоров? |
|||
|
#18+
insert into t_rest select * from t_OrderItems where (t_OrderItems.OrderId=18 ) and (t_OrderItems.NameId not in (select NameId from t_rest)) and (t_OrderItems.Invoice not in (select Invoice from t_rest )) а так сработает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2002, 19:22:17
|
|||
|---|---|---|---|
|
|||
Сложный запрос без курсоров? |
|||
|
#18+
Для ВладимирМ, тут все достаточно запутано, а свзывать с t_OrdersItems нельзя, в сток должны добавлятся записи если в стоке нет товара с таким инвойсом и запись в стоке должна апдэйтится если такая запись есть. Не спрашивайте почему так - так надо -)) Это какие внешнеэкономические лперации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2002, 19:45:19
|
|||
|---|---|---|---|
|
|||
Сложный запрос без курсоров? |
|||
|
#18+
Во написал, если кому интересно -)) update t_rest set t_rest.Qnty=t_rest.Qnty+t_OrderItems.Qnty from t_OrderItems where t_OrderItems.OrderId=33 and t_rest.NameId=t_OrderItems.NameId and t_rest.invoice=t_OrderItems.Invoice insert into t_rest (Qnty, NameId,ScladID,officeid,invoice) select Qnty,NameId, 17,1,Invoice from t_OrderItems where t_OrderItems.OrderId=33 and (t_OrderItems.Invoice not in (select invoice from t_rest )and t_OrderItems.NameId not in (select NameId from t_rest where invoice=t_OrderItems.Invoice )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2002, 19:53:28
|
|||
|---|---|---|---|
Сложный запрос без курсоров? |
|||
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&tablet=1&tid=1821051]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 353ms |

| 0 / 0 |
