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

Откуда:
Сообщений: 184
Доброго времени суток . Имею запрос вида :

WITH fnl as
    (select lo.id , s.service_name , lo.obj_name ,
    ........
    from dbo.r_objects ro
    inner join dbo.services  s on ro.service_id = s.id 
    inner join dbo.local_objects lo on ro.local_object_id = lo.id
    where ro.service_id = @service_id
)
    select id , service_name , CAST(obj_name as varbinary(200)) obj_name
    FROM fnl 
    WHERE ....... логика


Все работает отлично . Теперь хочу проверить если fnl пустой то перейти на другую логику . Пробовал следующим образом :

WITH fnl as
    (select lo.id , s.service_name , lo.obj_name ,
    ........
    from dbo.r_objects ro
    inner join dbo.services  s on ro.service_id = s.id 
    inner join dbo.local_objects lo on ro.local_object_id = lo.id
    where ro.service_id = @service_id
)
    select @table_count = COUNT(*) from fnl 
IF @table_count > 0
begin
    select id , service_name , CAST(obj_name as varbinary(200)) obj_name
    FROM fnl 
    WHERE ....... some logic
    end

else
  set @check = 'Data is empty'
  ...............логика


Выдает ошибку : Invalid object name 'fnl' . Помогите пожалуйста с запросом на проверку даты в fnl
17 янв 14, 00:06    [15427532]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку даты в CTE  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
NewBie77
Выдает ошибку : Invalid object name 'fnl' . Помогите пожалуйста с запросом на проверку даты в fnl
fnl, определённое в WITH, можно использовать только одн раз. Это же не временная таблица, а часть запроса.
17 янв 14, 00:19    [15427568]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку даты в CTE  [new]
NewBie77
Member

Откуда:
Сообщений: 184
alexeyvg,
А как написать запрос правильно ?
17 янв 14, 00:32    [15427596]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку даты в CTE  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
@@RowCount
17 янв 14, 00:36    [15427601]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку даты в CTE  [new]
NewBie77
Member

Откуда:
Сообщений: 184
Mnior
@@RowCount


Пробовал @@RowCount но не устраивает т.к выдает 2 значения : пустое и то что после @@RowCount
17 янв 14, 00:40    [15427605]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку даты в CTE  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Вообще-то это нарушает принципы разработки. Такие вещи должны быть стабильными.
NewBie77
set @check = 'Data is empty'
Это клиентский код (как я понял) - ему не место на сервере.

Можно сделать костыль для написание сего говнокода:
Засунуть результат во времянку. И если есть данные (@@RowCount) ею пользоваться.

Но я бы вычистил этот бардак.

А ещё возможно вы не знаете что такое представления (простые и параметризованные).
Не должно быть в обычном коде сложных JOIN-ов. А только смысловые, целыми блоками (представлениями).
Простыми словами - вынесите код WITH во VIEW / FUNCTION.
17 янв 14, 00:59    [15427639]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку даты в CTE  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Mnior
Вообще-то это нарушает принципы разработки. Такие вещи должны быть стабильными.
Имеется ввиду интерфейс данных.
Простыми словами - количество и формат таблиц. Не должен зависеть от условий.
Желательно. Остальное как редкое исключение.
17 янв 14, 01:02    [15427645]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на проверку даты в CTE  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
NewBie77
alexeyvg,
А как написать запрос правильно ?
Только чере времянку, как уже Mnior написал. Или пересмотреть требования к выводу.
17 янв 14, 01:48    [15427707]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить