Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 поисковый запрос с несколькими параметрами не работает  [new]
PaWeLL
Member

Откуда:
Сообщений: 12
Имеется такой запрос на выборку:


"select item_id, inv_num as 'Инвентарн. №', item_type, type_name as 'Тип объекта', ven_name + ' ' + model_name as 'Модель', full_name as 'Рабочее место', dep_name as Отделение
from dbo.items, dbo.users, dbo.departments, dbo.itemtypes, dbo.vendors, dbo.models
where
dbo.items.item_type = dbo.itemtypes.type_id
and dbo.items.owner_id = dbo.users.user_id
and dbo.items.ven_id = dbo.vendors.ven_id
and dbo.items.model_id = dbo.models.model_id
and dbo.users.dep_id=dbo.departments.dep_id
and dbo.items.inv_num like @num
and dbo.models.model_name like @model
and dbo.vendors.ven_name like @model
and (dbo.items.mrp_id = @mrp or dbo.items.mrp_id is null)
and dbo.items.item_type<>1
and parent_id = -1"


В этом состоянии все работает, но если добавить,

and dbo.users.dep_id=@dep


то работать перестает.

Подскажите пожалуйста, что я делаю не так?
12 фев 14, 16:28    [15558110]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
and dbo.users.dep_id=@dep


Навреное нет такого @dep которого вы передаете ?
12 фев 14, 16:32    [15558143]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
PaWeLL,

И что за любовь к кросс джойнам? Привычка с Access?
12 фев 14, 16:59    [15558323]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
PaWeLL
Member

Откуда:
Сообщений: 12
Maxx, существует. Вот и думаю, не накосячил ли я где в условии.
12 фев 14, 21:21    [15559405]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31426
PaWeLL
если добавить,
and dbo.users.dep_id=@dep

то работать перестает.

PaWeLL
Maxx, существует. Вот и думаю, не накосячил ли я где в условии.
Вы даже не выводите dbo.users.dep_id в вашем запросе. Откуда же такая уверенность?

Простро добавте это в список колонок и убедитесь, что его не существует.
12 фев 14, 22:16    [15559651]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
PaWeLL
Member

Откуда:
Сообщений: 12
alexeyvg, ну я же знаю, что есть в базе а чего нет. И потом, я уже вывожу dep_name.
12 фев 14, 22:51    [15559782]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31426
PaWeLL
alexeyvg, ну я же знаю, что есть в базе а чего нет.
Ну это же очевидно - раз запрос ничего не выводит по условию dbo.users.dep_id=@dep, то записи с этим dep_id и с остальными условиями запроса в базе нету, даже можно не проверять.
PaWeLL
И потом, я уже вывожу dep_name.
Мы говорим о dep_id, вы же не по dep_name добавили условие.
13 фев 14, 00:01    [15560036]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
PaWeLL
Member

Откуда:
Сообщений: 12
alexeyvg, такие записи существуют. Я в этом уверен.
17 фев 14, 09:40    [15575416]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
PaWeLL
alexeyvg, такие записи существуют. Я в этом уверен.
Мамой клянус! ©
17 фев 14, 09:51    [15575452]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31426
PaWeLL
alexeyvg, такие записи существуют. Я в этом уверен.

alexeyvg
Ну это же очевидно - раз запрос ничего не выводит по условию dbo.users.dep_id=@dep, то записи с этим dep_id и с остальными условиями запроса в базе нету, даже можно не проверять.
Уверенность против проверки - кто кого? :-)

Вы просто "уверены", а я проверил (посмотрев на ваш запрос).
17 фев 14, 09:53    [15575463]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 630
Оставьте только одно свое условие
dbo.users.dep_id=@dep

сделайте селект.
Потом добавляйте по однмоу из оставшихся условий и смотрите, на каком из "отвалиться" селект.

P.S.: только на всякий случай поставьте TOP 5 в select...
17 фев 14, 09:55    [15575477]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
PaWeLL
Member

Откуда:
Сообщений: 12
Mikle83,

select отваливается на этапе

and (dbo.items.mrp_id = @mrp or dbo.items.mrp_id is null)
17 фев 14, 10:53    [15575789]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
PaWeLL
Mikle83,

select отваливается на этапе

and (dbo.items.mrp_id = @mrp or dbo.items.mrp_id is null)
При этом @mrp имеет значение NULL, а dbo.items.mrp_id IS NOT NULL?

Кстати, почему бы Вам:
1. не выбросить запятые из FROM куда подальше
2. не использовать алиасы для имён таблиц?
17 фев 14, 11:00    [15575827]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 630
PaWeLL
Mikle83,

select отваливается на этапе

and (dbo.items.mrp_id = @mrp or dbo.items.mrp_id is null)


Сделайте Select без этого условия (сохранив все остальное), в вывод Select-a добавьте в самое начало:
Select  dbo.items.mrp_id, @mrp .......


Покажите результат селекта.
17 фев 14, 11:06    [15575869]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
PaWeLL
Member

Откуда:
Сообщений: 12
iap, mrp может быть null a может и не быть. Это запрос на выборку по нескольким критериям.

автор
Кстати, почему бы Вам:
1. не выбросить запятые из FROM куда подальше
2. не использовать алиасы для имён таблиц?


Потому что пока я не слишком опытен в написании запросов.
17 фев 14, 11:07    [15575870]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 630
PaWeLL
and (dbo.items.mrp_id = @mrp or dbo.items.mrp_id is null)


можно OR поменять на:

IsNull(dbo.items.mrp_id, @mrp) = @mrp


будет более читабельно и понятно.
17 фев 14, 11:23    [15575968]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Mikle83
PaWeLL
and (dbo.items.mrp_id = @mrp or dbo.items.mrp_id is null)



можно OR поменять на:

IsNull(dbo.items.mrp_id, @mrp) = @mrp



будет более читабельно и понятно.
Особенно если @mrp IS NULL
17 фев 14, 12:12    [15576292]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
Addx
Member

Откуда:
Сообщений: 957
PaWeLL
iap, mrp может быть null a может и не быть. Это запрос на выборку по нескольким критериям.

автор
Кстати, почему бы Вам:
1. не выбросить запятые из FROM куда подальше
2. не использовать алиасы для имён таблиц?


Потому что пока я не слишком опытен в написании запросов.


Это не оправдание. Так писать нельзя.
Как Вы получите опыт, если будете писать неправильно?

Что значит перестает работать?
Не запускается? Выдает не те результаты, которые Вы хотите увидеть?
17 фев 14, 13:19    [15576807]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
PaWeLL
Member

Откуда:
Сообщений: 12
Вообщем проблема такова: нужно сделать запрос поиска по нескольким критериям. Пока критерии типа string - все здорово, но когда дело доходит до int, то начинаются проблемы поскольку в запрос передается нулевое значение int, если критерий не был задан. А записи с таким значением в базе нет. Подозреваю, что именно поэтому запрос и не выдает ничего. mrp_id и dep_id как раз тот самый int. Если в тот же самый запрос проставить существующие значения, то все работает, как надо.
17 фев 14, 14:06    [15577108]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/faq/faq_topic.aspx?fid=114
17 фев 14, 14:10    [15577140]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 630
ТС тогда условие
and (dbo.items.mrp_id = @mrp or dbo.items.mrp_id is null)


не верно. Здесь вы выбираете:
* либо поле равно @mrp
* либо поле в таблице принимает значение Null

Вам же надо вторым поставить условие
* либо переменная равна NULL

and (dbo.items.mrp_id = @mrp or IsNull(mrp_id,-1) = -1)
17 фев 14, 15:03    [15577613]     Ответить | Цитировать Сообщить модератору
 Re: поисковый запрос с несколькими параметрами не работает  [new]
PaWeLL
Member

Откуда:
Сообщений: 12
Всем спасибо. Вроде бы разобрался с проблемой
19 фев 14, 12:00    [15588402]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить