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

Откуда:
Сообщений: 7915
Возможна ли такая конструкция ?

SELECT *
FROM
(
	WITH 
		c1 as (SELECT 1 as num),
		c2 as (SELECT 2 as num)
		SELECT num FROM c1
		UNION ALL
		SELECT num FROM c2
) L


Сильно не бейте...
25 июл 16, 13:40    [19451075]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5118
а зачем здесь WITH, чего хотите добиться в итоге?
25 июл 16, 13:46    [19451132]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Владимир СА,

автор
Возможна ли такая конструкция ?

а сервер вам на это не ответил?
25 июл 16, 13:47    [19451138]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Владимир СА,

WITH - это часть SELECTа.
А также UPDATEа, INSERTа, DELETEа и MERGEа.
Вот и пишите его в самом начале перечисленных инструкций.
25 июл 16, 13:53    [19451205]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Дедушка
а зачем здесь WITH, чего хотите добиться в итоге?
Отличный вопрос...
Пусть я имею кучу sql-файлов, которые оформлены в виде WITH...
(эти скипты здоровые и проверены)
Хотелось бы просто копипастом копировать и сделать UNION

Типа:
WITH ....
UNION ALL
WITH ....
UNION ALL
WITH ....
25 июл 16, 13:56    [19451226]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
iap
Владимир СА,

WITH - это часть SELECTа.
А также UPDATEа, INSERTа, DELETEа и MERGEа.
Вот и пишите его в самом начале перечисленных инструкций.
Согласен...
Просто в оракле работает:
SELECT *
FROM
(
    WITH 
        c1 as (SELECT 1 as num FROM DUAL),
        c2 as (SELECT 2 as num FROM DUAL)
        SELECT num FROM c1
        UNION ALL
        SELECT num FROM c2
) L

Вот и подумал, что что-то аналогичное...
25 июл 16, 14:00    [19451273]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
FROM DUAL
Меня сейчас стошнит!
25 июл 16, 14:03    [19451293]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
iap
FROM DUAL
Меня сейчас стошнит!
Я предполагал такой ответ...
Но что конкретно по делу ?
25 июл 16, 14:05    [19451305]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Владимир СА,

;WITH 
c1 as (SELECT 1 as num FROM num),
c2 as (SELECT 2 as num FROM num)

SELECT 
*
FROM 
(
	SELECT num FROM c1
	UNION ALL
	SELECT num FROM c2
) as x
25 июл 16, 14:06    [19451310]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
aleks2
Guest
[quot Владимир СА]
Дедушка
Пусть я имею кучу sql-файлов, которые оформлены в виде WITH...
(эти скипты здоровые и проверены)
Хотелось бы просто копипастом копировать и сделать UNION


Копипасти во VIEW. Потом
VIEW1  UNION ALL VIEW2
25 июл 16, 14:08    [19451324]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
TaPaK
Владимир СА,

;WITH 
c1 as (SELECT 1 as num FROM num),
c2 as (SELECT 2 as num FROM num)

SELECT 
*
FROM 
(
	SELECT num FROM c1
	UNION ALL
	SELECT num FROM c2
) as x
Это я отлично знаю...
Прочитай плиз 19451226
25 июл 16, 14:09    [19451327]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Владимир СА,

ну так напишите сначала в всё в WITH потом SELECT, хотя зачем это...
25 июл 16, 14:13    [19451360]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
TaPaK
Владимир СА,

ну так напишите сначала в всё в WITH потом SELECT, хотя зачем это...
Да же не хочется отвечать...
Видимо мало работали с WITH...
Это создавать новые алиасы... (имена которых могут совпадать в разных файлах, где физический смысл разный)...
25 июл 16, 14:16    [19451389]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
[quot aleks2]
Владимир СА
пропущено...


Копипасти во VIEW. Потом
VIEW1  UNION ALL VIEW2
Хм... Надо подумать...
25 июл 16, 14:16    [19451396]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
o-o
Guest
Владимир СА
Возможна ли такая конструкция ?

SELECT *
FROM
(
	WITH 
		c1 as (SELECT 1 as num),
		c2 as (SELECT 2 as num)
		SELECT num FROM c1
		UNION ALL
		SELECT num FROM c2
) L


Сильно не бейте...

невозможно.
потому что
...
The WITH clause is used in T-SQL for several different purposes.
To avoid ambiguity, when the WITH clause is used to define a CTE, the preceding statement in the same
batch—if one exists—must be terminated with a semicolon.

об этом же вам сообщает парсер:
parser
the previous statement must be terminated with a semicolon.


ну и как вы собирались впихнуть ";" внутрь открывающейся скобки?
---
ну и про Оракл:
парсер же у него другой, может, там нет других употреблений with.
а в T-SQL есть.
и раз именно парсер требует это ";" перед WITH при наличии кода до него,
единственный выход у вас это создавать сущность типа вьюхи/функции,
где этот WITH будет первым стейтментом
25 июл 16, 14:33    [19451543]     Ответить | Цитировать Сообщить модератору
 Re: WITH Clause  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
o-o
Владимир СА
Возможна ли такая конструкция ?

SELECT *
FROM
(
	WITH 
		c1 as (SELECT 1 as num),
		c2 as (SELECT 2 as num)
		SELECT num FROM c1
		UNION ALL
		SELECT num FROM c2
) L


Сильно не бейте...

невозможно.
потому что
...
The WITH clause is used in T-SQL for several different purposes.
To avoid ambiguity, when the WITH clause is used to define a CTE, the preceding statement in the same
batch—if one exists—must be terminated with a semicolon.

об этом же вам сообщает парсер:
parser
the previous statement must be terminated with a semicolon.


ну и как вы собирались впихнуть ";" внутрь открывающейся скобки?
---
ну и про Оракл:
парсер же у него другой, может, там нет других употреблений with.
а в T-SQL есть.
и раз именно парсер требует это ";" перед WITH при наличии кода до него,
единственный выход у вас это создавать сущность типа вьюхи/функции,
где этот WITH будет первым стейтментом
Про ";" я знаю перед WITH... Просто думал кто-то общался с чем-то аналогичным...
o-o
единственный выход у вас это создавать сущность типа вьюхи/функции,
где этот WITH будет первым стейтментом
Да, это сейчас и рассматриваю...
Всем большое спасибо...
25 июл 16, 14:45    [19451649]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить