Вопрос по синтаксису запроса.

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

Вопрос по синтаксису запроса.

Непрочитанное сообщение Amadeus » 2010-01-15 15:04:04

Доброго времени суток.

Есть такая ситуевина.

Код: Выделить всё

SELECT @plat=IsNull^(MAX^(N_PLAT_POR^),0^)+1 FROM SCL_NAKL ^(UPDLOCK HOLDLOCK^)^;
Это исходный кусок запроса, при котором, вновь созданному документу, присваивается самый большой номер. В данном случае счета.
Возникла необходимость поменять номерацию, уменьшить его, что бы номер брался +1 от конкретного типа записей.

Код: Выделить всё

SELECT @plat=IsNull^(MAX^(N_PLAT_POR^),0^)+1 FROM SCL_NAKL Where type_doc='С'  ^(UPDLOCK HOLDLOCK^)^ ;

SELECT @plat=IsNull^(MAX^(N_PLAT_POR^),0^)+1 FROM SCL_NAKL ^(UPDLOCK HOLDLOCK^)^  Where type_doc='С';

SELECT @plat=IsNull^(MAX^(N_PLAT_POR^),0^)+1 FROM SCL_NAKL  Where type_doc='С';
где

Код: Выделить всё

Where type_doc='С'
C - это большая русская С. и кусок указывает на тип.

Ни один из вариантов не прокатил,
Если есть у кого мысли, как правильно сделать, буду признателен за помощь.
Нет ничего невозможного

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

Re: Вопрос по синтаксису запроса.

Непрочитанное сообщение Гость » 2010-01-15 15:07:49

Ни один из вариантов не прокатил,
результат какой?

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

Re: Вопрос по синтаксису запроса.

Непрочитанное сообщение Amadeus » 2010-01-15 15:11:43

В рабочем варианте, при выполнении данного запроса, в БД падает неучитываемый счет, т.е обычный текстовик с порядковым номером счета.

При попытках изменить запрос, в первом и третьем случае, счета в базе нет, во втором - вещается весь модуль выписки таких счетов.
Нет ничего невозможного

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Вопрос по синтаксису запроса.

Непрочитанное сообщение Fastman » 2010-01-17 16:15:22

Система глупая конечно.
Нежелательно делать выборки по каким то текстовым значениям и признакам.
Но чтобы не вдаваться в подробности ваш вариант в лоб решается так:
Заведите табличку сопоставлений типа документа с его идентификатором:

Код: Выделить всё

ID  DOC_TYPE NAME
0   C               Документ марки C 
1   D               Документ марки D
2   E               Документ марки E
3   F               Документ марки F
А в таблице с документами добавьте поле с ID
И выбирайте с WHERE 0/1/2/...
И перепишите запрос с новыми реалиями.

Ведь вам никто не гарантирует что запрос с русским символом 'C' будет совпадать со значением в котором представляется этот символ в базе :)
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

Re: Вопрос по синтаксису запроса.

Непрочитанное сообщение Amadeus » 2010-01-18 13:41:58

Если бы все было бы так просто).

Единственное, что позволяет БД - это делать селекты к ней, так как редактирование таблиц и т.д - закрытая функция).
Нет ничего невозможного

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Вопрос по синтаксису запроса.

Непрочитанное сообщение Fastman » 2010-01-18 19:23:49

Amadeus писал(а):Если бы все было бы так просто).

Единственное, что позволяет БД - это делать селекты к ней, так как редактирование таблиц и т.д - закрытая функция).
Тогда сочувствую. Что курили разработчики - непонятно :) Тут главное теперь отследить... MSSQL не имеет настройки кодировки чтобы выполнить запрос либо в другом проблема.
Попробуйте что ли

Код: Выделить всё

WHERE type_doc LIKE '%С%'
но если это и сработает - будет сцуко медленный запрос :)

Проверить какие кодировки поддерживает база можно примерно так:

Код: Выделить всё

use db_name
go
select collation from syscolumns where id = object_id('plist') and name = 'Name'
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
Amadeus
ст. сержант
Сообщения: 332
Зарегистрирован: 2008-10-05 12:42:44
Откуда: Kiev

Re: Вопрос по синтаксису запроса.

Непрочитанное сообщение Amadeus » 2010-01-18 19:42:56

А какой из трех типов наиболее правильный?
Я про запросы которые в первом посте по синтаксису.

Что курили, кстати интереснй вопрос, но приходится работать с тем, что есть:).
Нет ничего невозможного

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Вопрос по синтаксису запроса.

Непрочитанное сообщение Fastman » 2010-01-18 19:53:59

Amadeus писал(а):А какой из трех типов наиболее правильный?
Я про запросы которые в первом посте по синтаксису.
Что курили, кстати интереснй вопрос, но приходится работать с тем, что есть:).
На мой взгляд - я бы никакой не пользовал. Я конечно не знаю ситуации... но уникальные номера генерировать методом +1 не совсем верно и безопасно и не гарантирует правильности.
Представьте что у вас 2 юзера теоретически выполнили запрос, им одновременно select вернул каунтер..они спокойно приплюсовали единицу и у вас в базе появилось 2 документа с одинаковым ID :)
Если распишете ситуацию подробнее - можно подумать... Тут может еще кто подскажет, я сваливаю на недельку в Киев, так что оперативно ответить не смогу :)
Главное в жизни здоровье и любовь, остальное я все куплю.