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

Откуда: Москва<-Петушки
Сообщений: 8255
Есть такое?
Проапгрейдили сервер до 2012, функция перестала выполнятся.
Перед четвёртым вложенным CTE выдаёт Incorrect syntax
29 янв 13, 17:44    [13846258]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
Видимо, в функции ошибка в 17й строке.
29 янв 13, 17:45    [13846264]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Гавриленко Сергей Алексеевич
Видимо, в функции ошибка в 17й строке.
петросян-отстой
29 янв 13, 17:46    [13846272]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
ZVER-10
Гавриленко Сергей Алексеевич
Видимо, в функции ошибка в 17й строке.
петросян-отстой
Зато угадывать код функций, в которых есть синтаксическая ошибка - это круто.
29 янв 13, 17:49    [13846282]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
Гавриленко Сергей Алексеевич
ZVER-10
пропущено...
петросян-отстой
Зато угадывать код функций, в которых есть синтаксическая ошибка - это круто.


ну в общем-то вопрос в сабже )))

но ваш ответ в настроил меня на верный путь
написать тестовый пример чтобы было что предъявить
и выяснилось, что число вложений тут не причём

а проблема в том, что одна из CTE таблиц называлась Result
то есть вот такой запрос
    WITH Result
    AS
    (
        SELECT 1 as Col
    )

	select * from Result

на 2012 не работает
выдаёт Incorrect syntax near 'Result'.
а на 2010 работал
29 янв 13, 17:56    [13846345]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
Ну так:
;WITH Result
    AS
    (
        SELECT 1 as Col
    )

	select * from Result
29 янв 13, 17:57    [13846351]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
    WITH [Result]
    AS
    (
        SELECT 1 as Col
    )

	select * from [Result]

А так работает.

Result стало быть теперь зарезервированное слово.
29 янв 13, 17:57    [13846353]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
Или нет?
29 янв 13, 17:58    [13846360]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
Гавриленко Сергей Алексеевич
Ну так:
;WITH Result
    AS
    (
        SELECT 1 as Col
    )

	select * from Result

тоже Incorrect syntax near 'Result'.
29 янв 13, 17:58    [13846361]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
.NET
Result стало быть теперь зарезервированное слово.
Ясно.
29 янв 13, 17:59    [13846368]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
.NET
Гавриленко Сергей Алексеевич
Ну так:
;WITH Result
    AS
    (
        SELECT 1 as Col
    )

	select * from Result

тоже Incorrect syntax near 'Result'.

прям вот этот запрос выдал ошибку или вы ";" поставили перед своим кодом?
29 янв 13, 18:01    [13846380]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
ZVER-10
.NET
пропущено...

тоже Incorrect syntax near 'Result'.

прям вот этот запрос выдал ошибку или вы ";" поставили перед своим кодом?

да прям вот этот
29 янв 13, 18:03    [13846401]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
ZVER-10,
извините, пропустил...тупонул
29 янв 13, 18:03    [13846402]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
.NET,
см. таблицу Будущие ключевые слова
29 янв 13, 18:10    [13846460]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 611
странно, а у меня на
Microsoft SQL Server 2012 (SP1) - 11.0.3321.0 (X64) 
	Nov 14 2012 19:41:38 
	Copyright (c) Microsoft Corporation
	Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


WITH Result
    AS
    (
        SELECT 1 as Col
    )

	select * from Result

отработал без ошибок
29 янв 13, 18:49    [13846696]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
Диклевич Александр
странно, а у меня на
....
отработал без ошибок

не странно если посетить указанный сайт 13846460
29 янв 13, 19:15    [13846901]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
Диклевич Александр
странно, а у меня на
Microsoft SQL Server 2012 (SP1) - 11.0.3321.0 (X64) 
	Nov 14 2012 19:41:38 
	Copyright (c) Microsoft Corporation
	Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


WITH Result
    AS
    (
        SELECT 1 as Col
    )

	select * from Result

отработал без ошибок


Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Странно у меня версия более ранняя и не работает.
29 янв 13, 19:34    [13846982]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
наверное потому что Enterprise
29 янв 13, 19:34    [13846987]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
Диклевич Александр,

или потому что у вас Level 15 - это не ошибка
29 янв 13, 19:41    [13847020]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
ZVER-10
Member

Откуда:
Сообщений: 506
.NET,
в MSDN-е четко сказано: "Старайтесь не использовать эти слова в качестве идентификаторов...". копать не имеет смысла
29 янв 13, 20:02    [13847113]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ZVER-10
.NET,
в MSDN-е четко сказано: "Старайтесь не использовать эти слова в качестве идентификаторов...". копать не имеет смысла

Ну и что, для 2008 R2 тоже было про это сказано, однако там этот запрос выполняется.

Мои раскопки показали, что достаточно заквотировать только первое слово Result:
  WITH [Result]
    AS
    (
        SELECT 1 as Col
    )

	select * from Result
— выполняется без ошибок.

Далее, обнаружилась новая фича MSSQL 2012 — EXECUTE ... WITH RESULT SETS: http://msdn.microsoft.com/en-us/library/ms188332.aspx.

Видимо, когда MSSQL-парсер видит сочетание "WITH RESULT", он ожидает, что это часть "EXECUTE WITH RESULT SETS" и выдаёт ошибку.
29 янв 13, 20:17    [13847186]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Гость333
выполняется без ошибок

Если что, проверял на sqlfiddle.com, т.к. не имею в пределах досягаемости установленного SQL2012.
29 янв 13, 20:18    [13847190]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 611
.NET,

У Developer те же фичи что и у Enterprise.
А что такое Level 15?
29 янв 13, 23:27    [13847860]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
.NET
Member

Откуда: Москва<-Петушки
Сообщений: 8255
Гость333

Видимо, когда MSSQL-парсер видит сочетание "WITH RESULT", он ожидает, что это часть "EXECUTE WITH RESULT SETS" и выдаёт ошибку.


Не вот так тоже не работает
WITH T
    AS
    (
        SELECT 1 as Col
    ),
	Result
    AS
    (
        SELECT Col from T
    )

	select * from Result


Хотя тут нет "WITH RESULT"

Диклевич Александр
А что такое Level 15?


Ну, это уровень критичности ошибки.
Он выводится в сообщении об ошибке

автор
Msg 102, Level 15, State 1, Line 6
Incorrect syntax near 'Result'.


Насколько я помню, где-то на сервере можно настроить
с какого уровня кртичности кидать ошибку.
30 янв 13, 15:09    [13851275]     Ответить | Цитировать Сообщить модератору
 Re: Ограничение на число вложенных не рекурсивных CTE запросов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
.NET
Насколько я помню, где-то на сервере можно настроить
с какого уровня кртичности кидать ошибку.
Нет таких настроек.

Но вот совместимость синтаксиса можно настроить через Database Compatibility Level.
30 янв 13, 16:07    [13851756]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить