Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Использоване CTE и условия IF  [new]
Bryk_Alien
Guest
- MSQL 2008
- Среда SSMS

Здраствуйте,
В хр. процедуре пишу код:
WITH TTT AS
(
sql-запрос
)

IF 1=1
SELECT * FROM TTT
Получаю ошибку:
Сообщение 156, уровень 15, состояние 1, строка 43
Неправильный синтаксис около ключевого слова "IF".


А так:
WITH TTT AS
(
sql-запрос
)

SELECT * FROM TTT
данные выводятся

Подскажите, можно ли использовать логические условия типа IF вместе с CTE?
И как мне быть, если в зависимости от разных условий мне нужно вывести разный набор данных из табличного выражения?
21 ноя 13, 13:01    [15167672]     Ответить | Цитировать Сообщить модератору
 Re: Использоване CTE и условия IF  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Нельзя.
Особенно это досадно, если надо написать IF EXISTS() для, например, рекурсивного CTE.
Но CTE - это просто часть одного-единственного запроса, живущее только до конца
выполнения этого запроса.
Так что "разный набор данных" возможен только в виде INION [ALL] и с соответствующими
условиями в WHERE
21 ноя 13, 13:09    [15167721]     Ответить | Цитировать Сообщить модератору
 Re: Использоване CTE и условия IF  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Опечатался - не INION, а UNION, конечно же
21 ноя 13, 13:11    [15167729]     Ответить | Цитировать Сообщить модератору
 Re: Использоване CTE и условия IF  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
И как мне быть, если в зависимости от разных условий мне нужно вывести разный набор данных из табличного выражения?


Убрать CTE и положить результат (sql-запрос) в табличную переменную\временную таблицу.
21 ноя 13, 13:14    [15167753]     Ответить | Цитировать Сообщить модератору
 Re: Использоване CTE и условия IF  [new]
Bryk_Alien
Guest
Спасибо всем,
очень досадно... ладно, буду что-нибудь придумывать
21 ноя 13, 13:50    [15168042]     Ответить | Цитировать Сообщить модератору
 Re: Использоване CTE и условия IF  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
Bryk_Alien
В хр. процедуре пишу код:
WITH TTT AS
(
sql-запрос
)

IF 1=1
SELECT * FROM TTT
Получаю ошибку:

так а чем не устраивает такое?
WITH TTT AS
(
sql-запрос
)
SELECT * FROM TTT WHERE 1 = 1
21 ноя 13, 13:53    [15168073]     Ответить | Цитировать Сообщить модератору
 Re: Использоване CTE и условия IF  [new]
sdet
Member

Откуда:
Сообщений: 463
Shakill
Bryk_Alien
В хр. процедуре пишу код:
WITH TTT AS
(
sql-запрос
)

IF 1=1
SELECT * FROM TTT
Получаю ошибку:

так а чем не устраивает такое?
WITH TTT AS
(
sql-запрос
)
SELECT * FROM TTT WHERE 1 = 1

Условие может быть вне таблицы TTT
21 ноя 13, 13:59    [15168119]     Ответить | Цитировать Сообщить модератору
 Re: Использоване CTE и условия IF  [new]
Bryk_Alien
Guest
Shakill,

Да там я "догадался" написать универсальный запрос, который выводит данные для трёх состояний - с различной группировкой, количеством и названием полей. для нескольких довольно различных по устройству отчётов...
21 ноя 13, 14:01    [15168142]     Ответить | Цитировать Сообщить модератору
 Re: Использоване CTE и условия IF  [new]
Glory
Member

Откуда:
Сообщений: 104760
Bryk_Alien
Да там я "догадался" написать универсальный запрос, который выводит данные для трёх состояний - с различной группировкой, количеством и названием полей. для нескольких довольно различных по устройству отчётов...

А поместить cte в представление ?
21 ноя 13, 14:05    [15168183]     Ответить | Цитировать Сообщить модератору
 Re: Использоване CTE и условия IF  [new]
sdet
Member

Откуда:
Сообщений: 463
Glory
Bryk_Alien
Да там я "догадался" написать универсальный запрос, который выводит данные для трёх состояний - с различной группировкой, количеством и названием полей. для нескольких довольно различных по устройству отчётов...

А поместить cte в представление ?

Да там с параметрами наверное, лучше table valued function
21 ноя 13, 14:13    [15168249]     Ответить | Цитировать Сообщить модератору
 Re: Использоване CTE и условия IF  [new]
Bryk_Alien
Guest
Glory
А поместить cte в представление ?
Кстати да, ка вариант... Запрос в СТЕ - без параметров, просто, цук, много кода.
Спасибо! +)
21 ноя 13, 14:24    [15168356]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить