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

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

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.

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

Новое сообщение Amadeus » 2010-01-15 16: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 - это большая русская С. и кусок указывает на тип.

Ни один из вариантов не прокатил,
Если есть у кого мысли, как правильно сделать, буду признателен за помощь.
Нет ничего невозможного
Аватара пользователя
Amadeus
сержант
 
Сообщения: 168
Зарегистрирован: 2008-10-05 13:42:44

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

Новое сообщение Гость » 2010-01-15 16:07:49

Ни один из вариантов не прокатил,

результат какой?
Гость
проходил мимо
 

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

Новое сообщение Amadeus » 2010-01-15 16:11:43

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

При попытках изменить запрос, в первом и третьем случае, счета в базе нет, во втором - вещается весь модуль выписки таких счетов.
Нет ничего невозможного
Аватара пользователя
Amadeus
сержант
 
Сообщения: 168
Зарегистрирован: 2008-10-05 13:42:44

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

Новое сообщение Fastman » 2010-01-17 17:15:22

Система глупая конечно.
Нежелательно делать выборки по каким то текстовым значениям и признакам.
Но чтобы не вдаваться в подробности ваш вариант в лоб решается так:
Заведите табличку сопоставлений типа документа с его идентификатором:
Код: Выделить всёРазвернуть
ID  DOC_TYPE NAME
0   C               Документ марки C
1   D               Документ марки D
2   E               Документ марки E
3   F               Документ марки F


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

Ведь вам никто не гарантирует что запрос с русским символом 'C' будет совпадать со значением в котором представляется этот символ в базе :)
Главное в жизни здоровье и любовь, остальное я все куплю.
Аватара пользователя
Fastman
ст. лейтенант
 
Сообщения: 1157
Зарегистрирован: 2006-07-07 11:20:38
Откуда: Минск. РБ

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

Новое сообщение Amadeus » 2010-01-18 14:41:58

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

Единственное, что позволяет БД - это делать селекты к ней, так как редактирование таблиц и т.д - закрытая функция).
Нет ничего невозможного
Аватара пользователя
Amadeus
сержант
 
Сообщения: 168
Зарегистрирован: 2008-10-05 13:42:44

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

Новое сообщение Fastman » 2010-01-18 20:23:49

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

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

Тогда сочувствую. Что курили разработчики - непонятно :) Тут главное теперь отследить... MSSQL не имеет настройки кодировки чтобы выполнить запрос либо в другом проблема.
Попробуйте что ли
Код: Выделить всёРазвернуть
WHERE type_doc LIKE '%С%'
но если это и сработает - будет сцуко медленный запрос :)

Проверить какие кодировки поддерживает база можно примерно так:
Код: Выделить всёРазвернуть
use db_name
go
select collation from syscolumns where id = object_id('plist') and name = 'Name'
Главное в жизни здоровье и любовь, остальное я все куплю.
Аватара пользователя
Fastman
ст. лейтенант
 
Сообщения: 1157
Зарегистрирован: 2006-07-07 11:20:38
Откуда: Минск. РБ

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

Новое сообщение Amadeus » 2010-01-18 20:42:56

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

Что курили, кстати интереснй вопрос, но приходится работать с тем, что есть:).
Нет ничего невозможного
Аватара пользователя
Amadeus
сержант
 
Сообщения: 168
Зарегистрирован: 2008-10-05 13:42:44

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

Новое сообщение Fastman » 2010-01-18 20:53:59

Amadeus писал(а):А какой из трех типов наиболее правильный?
Я про запросы которые в первом посте по синтаксису.
Что курили, кстати интереснй вопрос, но приходится работать с тем, что есть:).

На мой взгляд - я бы никакой не пользовал. Я конечно не знаю ситуации... но уникальные номера генерировать методом +1 не совсем верно и безопасно и не гарантирует правильности.
Представьте что у вас 2 юзера теоретически выполнили запрос, им одновременно select вернул каунтер..они спокойно приплюсовали единицу и у вас в базе появилось 2 документа с одинаковым ID :)
Если распишете ситуацию подробнее - можно подумать... Тут может еще кто подскажет, я сваливаю на недельку в Киев, так что оперативно ответить не смогу :)
Главное в жизни здоровье и любовь, остальное я все куплю.
Аватара пользователя
Fastman
ст. лейтенант
 
Сообщения: 1157
Зарегистрирован: 2006-07-07 11:20:38
Откуда: Минск. РБ


Вернуться в Базы Данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0