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

Откуда:
Сообщений: 47
Добрый день!

Составила вот такой запрос:

if exists (SELECT DOC_RC.DOC_DATE, DOC_RC.FREE_NUM, REF_LINK.ISN_LINKED_DOC,
REF_LINK.LINKED_NUM

FROM DOC_RC INNER JOIN
REF_CORRESP ON DOC_RC.ISN_DOC = REF_CORRESP.ISN_DOC_INP
INNER JOIN REF_LINK ON DOC_RC.ISN_DOC = REF_LINK.ISN_REF_DOC
WHERE (REF_CORRESP.CORRESP_NUM = '8800')
AND (REF_CORRESP.CORRESP_KIND = '2')
AND (REF_LINK.ISN_CLLINK='1'))

Однако выдается ошибка: Сообщение 102, уровень 15, состояние 1, строка 9
Неправильный синтаксис около конструкции ")".

Убираю IF EXISTS и сам запрос отрабатывается нормально. Подскажите, пожалуйста, в чем может быть проблема?

IF EXISTS решила использовать, чтобы в одной хранимой процедуре проверять, если есть строка, удовлетворяющая поисковым критериям, то выводить ее, а если нет, то выводить другой запрос:

SELECT DOC_RC.DOC_DATE, DOC_RC.FREE_NUM,
FROM DOC_RC INNER JOIN
REF_CORRESP ON DOC_RC.ISN_DOC = REF_CORRESP.ISN_DOC_INP

WHERE (REF_CORRESP.CORRESP_NUM = '8800')
AND (REF_CORRESP.CORRESP_KIND = '2')


Спасибо!
5 сен 12, 15:29    [13118380]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Eyere,по вашему мнению if exists это одна команда?И что она должна делать?
З.Ы
Прочитайте в хелпе про if и про exists.
5 сен 12, 15:34    [13118441]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
Eyere,

В общем виден синтаксис такой:
if exists (select ...)
begin
end


И проверять лучше всего простеньким запросиком (с одним полем и top 1). Дабы не нагружать сервант.
5 сен 12, 17:36    [13119624]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Klick
И проверять лучше всего простеньким запросиком (с одним полем и top 1). Дабы не нагружать сервант.
абсолютно фиолетово, сколько там будет топов или полей, можно хоть * воткнуть, план поменялся не должен.
5 сен 12, 19:21    [13120208]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Mind
можно хоть * воткнуть
Лучше так
Exists(SELECT 1/0 FROM ...

Вправляет моск, после того как встречаешь это в рабочем коде.
6 сен 12, 12:32    [13123097]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
Mind
Klick
И проверять лучше всего простеньким запросиком (с одним полем и top 1). Дабы не нагружать сервант.
абсолютно фиолетово, сколько там будет топов или полей, можно хоть * воткнуть, план поменялся не должен.
Ну вот не совсем так!
Если в выражении SELECTa будет нечто, удовлетворяющее правилам для имени объекта БД,
то в таблице должно-таки быть поле с таким именем! Иначе - сообщение об ошибке.
6 сен 12, 14:11    [13123915]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
iap
Если в выражении SELECTa будет нечто, удовлетворяющее правилам для имени объекта БД,
то в таблице должно-таки быть поле с таким именем! Иначе - сообщение об ошибке.
Ну вот пример когда ошибки языка вываливаются на поддержку парсера. Если бы
EXISTS(FROM ... WHERE ...) 
то было бы меньше недопонимания/разногласий и таких бесполезных топиков.
6 сен 12, 17:43    [13125863]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
Mnior
Ну вот пример когда ошибки языка вываливаются на поддержку парсера. Если бы
EXISTS(FROM ... WHERE ...) 

то было бы меньше недопонимания/разногласий и таких бесполезных топиков.
Это точно. Тем более что сиквел зачем то проверяет права на поля, указанные в списке SELECT, хотя наличие/отсутствие полей и прав на них в данном случае неважно.
6 сен 12, 18:19    [13126082]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
Mnior
iap
Если в выражении SELECTa будет нечто, удовлетворяющее правилам для имени объекта БД,
то в таблице должно-таки быть поле с таким именем! Иначе - сообщение об ошибке.
Ну вот пример когда ошибки языка вываливаются на поддержку парсера. Если бы
EXISTS(FROM ... WHERE ...) 
то было бы меньше недопонимания/разногласий и таких бесполезных топиков.
Эдак Вы и на FROM dual замахнётесь!
Я вот боюсь, что Microsoft может ввести обязателный FROM в SELECTе, как этого стандарт требует.
6 сен 12, 20:03    [13126424]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Mnior
Mind
можно хоть * воткнуть
Лучше так
Exists(SELECT 1/0 FROM ...

Вправляет моск, после того как встречаешь это в рабочем коде.
Нее, это уж чересчур жестоко
6 сен 12, 20:29    [13126495]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
iap
Я вот боюсь, что Microsoft может ввести обязателный FROM в SELECTе, как этого стандарт требует.
Ну может уже в стандарте 2014 и не будет такого "обязательства". :) И вообще вы так уверены в обязательстве?

И стандарты сейчас построены так: есть понятие Feature, они именованы(пронумерованы), и просто в продукте должно быть описано какие поддержаны. Официально у M$ очень мало.
Не скажу что FROM поставлен как Feature (надо смотреть, там 1.5К листов), но большая часть сделано так. Не реально поддерживать всё, возможно там вообще взаимоисключающих параграфов туча.

Расстраивает то что мы все в ... хвосте и IT стандарты под крылом ANSI т.е. пендосов. Согласен что кроить язык с пол пинка никто не согласится, но плохо то что он не развивается - силёнок не у кого не хватает. А вот подраться - так и повода не надо.

Да и вообще, стандарты нужны бизнесу, а не нашему сообществу. Да и тенденция такая, что стандарты как подход что-то не особо популярен в последнее время.

С другой стороны "отцам" вообще на это всё фиолетово, на наш каменный век где мы живём им вообще плевать, запашёк давно веет.

Короче, на стандартах далеко не уедешь.

IMXO
6 сен 12, 22:26    [13126816]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
Eyere
Member

Откуда:
Сообщений: 47
Что-то я не поняла. Как мне в итоге переписать-то этот запрос нужно?
16 окт 12, 12:42    [13325821]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
Eyere
Что-то я не поняла. Как мне в итоге переписать-то этот запрос нужно?
После IF EXISTS() надо написать то, что будет выполнено сервером, если EXISTS() вернёт TRUE.
Отдельно взятый IF смысла не имеет.
16 окт 12, 12:48    [13325870]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
Eyere
Member

Откуда:
Сообщений: 47
Да, сообразила, наконец-то! Спасибо!
16 окт 12, 12:55    [13325912]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с IF EXISTS  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
Eyere
Да, сообразила, наконец-то! Спасибо!

1 мес и 11 дней )))
16 окт 12, 14:38    [13326934]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить