Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Dump (CROSS APPLY + CASE + Func)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Не знаю какая последняя версия сервера. Проверьте у кого последняя.
Может и баян, но если нет, то отпишите пжалуста.
USE tempdb
GO
CREATE FUNCTION dbo.fnTest() RETURNS SysName AS BEGIN RETURN '1' END;
GO
PRINT @@Version
GO
SELECT * FROM	(SELECT dbo.fnTest())X(X)
CROSS APPLY	(SELECT CASE WHEN X = '1' THEN 1 END)Y(Y)
GO
Microsoft SQL Server 2005 - 9.00.4053.00 (Intel X86) 
May 26 2009 14:24:20
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.
Msg 0, Level 20, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.

29 дек 09, 14:24    [8132614]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Microsoft SQL Server 2008 (SP1) - 10.0.2746.0 (X64) 
Nov 9 2009 16:37:47
Copyright (c) 1988-2008 Microsoft Corporation
Developer Edition (64-bit) on Windows NT 5.2 <X64> (Build 3790: Service Pack 2)


(1 row(s) affected)
29 дек 09, 14:26    [8132630]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
tpg
Microsoft SQL Server 2008 (SP1) - 10.0.2746.0 (X64)
Аналогично. Но интересно на счёт 2005-го. Он ведь поддерживается.
29 дек 09, 14:29    [8132648]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Microsoft SQL Server 2005 - 9.00.4266.00 (X64)
Oct 7 2009 17:38:17
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)

Msg 0, Level 11, State 0, Line 0
При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы.
Msg 0, Level 20, State 0, Line 0
При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы.
29 дек 09, 14:44    [8132814]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Mnior,

а если там кругом N расставить? Всё-таки, sysname - это юникод...
Хотя, древний 2005-й сервер малоинтересен
29 дек 09, 14:45    [8132818]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
iap
Хотя, древний 2005-й сервер малоинтересен
+1
29 дек 09, 14:52    [8132906]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
iap,
виноват, заблуждает.
USE tempdb
GO
CREATE FUNCTION dbo.fnTest() RETURNS Int AS BEGIN RETURN 1 END;
GO
PRINT @@Version
GO
SELECT * FROM	(SELECT dbo.fnTest())X(X)
CROSS APPLY	(SELECT CASE WHEN X = 1 THEN 1 END)Y(Y)
GO

То что древний это да, но 2000-й то до сих пор немало юзают. Мне то особо не нужно, разве что этот баг может "вскроет" целое семейство глюков. Настораживает что на банальном запросе, никаких сторонних взаимодействий.
Поддержка 2005-го уже перешла в "пассивный" режим?
29 дек 09, 15:37    [8133346]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Glory
Member

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

То что древний это да, но 2000-й то до сих пор немало юзают. Мне то особо не нужно, разве что этот баг может "вскроет" целое семейство глюков. Настораживает что на банальном запросе, никаких сторонних взаимодействий.
Поддержка 2005-го уже перешла в "пассивный" режим?

Вот именно, что уж через чур банальный запрос. Сплошные константы, ни одной реальной таблицы
Каков план выполнения такого запроса ?
29 дек 09, 15:40    [8133370]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Mnior
Поддержка 2005-го уже перешла в "пассивный" режим?
Пока вроде бы нет.
Но дефекты правят только в рамках SoftwareAssurance.
29 дек 09, 15:46    [8133433]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

case не виноват, походу:
SELECT * FROM	(SELECT dbo.fnTest())X(X)
CROSS APPLY	(SELECT X + 0)Y(Y)

Posted via ActualForum NNTP Server 1.4

29 дек 09, 15:46    [8133444]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Glory
Вот именно, что уж через чур банальный запрос. Сплошные константы, ни одной реальной таблицы
Всё "лишнее" (99.9%) из реального запроса было вырезано.
Glory
Каков план выполнения такого запроса ?
Вываливается. Получается ошибка в построителе планов.

daw
case не виноват, походу
Ну, ... точнее операнды добавляются в копилку. Главное чтоб они были в SELECT-е, с WHERE всё нормально.
29 дек 09, 15:57    [8133523]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mnior
Glory
Вот именно, что уж через чур банальный запрос. Сплошные константы, ни одной реальной таблицы
Всё "лишнее" (99.9%) из реального запроса было вырезано.
Glory
Каков план выполнения такого запроса ?
Вываливается. Получается ошибка в построителе планов.

Получается, что запрос очен утрирован. Имхо.
29 дек 09, 15:59    [8133551]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Ну, ... точнее операнды добавляются в копилку. Главное чтоб они были в
> SELECT-е, с WHERE всё нормально.

в 2008-ом план такой получается:
SELECT * FROM (SELECT dbo.fnTest())X(X)  CROSS APPLY (SELECT CASE WHEN X = 1 THEN 1 END)Y(Y)
   |--Compute Scalar(DEFINE:([Expr1001]=CASE WHEN [Expr1000]=(1) THEN (1) ELSE NULL END))
        |--Compute Scalar(DEFINE:([Expr1000]=[tempdb].[dbo].[fnTest]()))
             |--Constant Scan

а вот 2005-ый два таких Compute Scalar в ступор вводят, насколько я понимаю.
если как-то от одного из них избавиться (не использовать выражений от X в селект-листе,
или, например, функцию детерминированной сделать), то все, вроде, ок.
шибко специфицское сочетание такое получается, в общем...

Posted via ActualForum NNTP Server 1.4

29 дек 09, 16:13    [8133674]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
DeColo®es
Mnior
Поддержка 2005-го уже перешла в "пассивный" режим?
Пока вроде бы нет.
Но дефекты правят только в рамках SoftwareAssurance.
Ну в принципе я про это. Править будут либо для клиента лично, либо помогут с обходом проблемы, если править трудоёмко.

Этот баг видимо так и останется ... в аналах истории. :)
Но он немного намекает на основы внутреннего проектирования / архитектуры системы. Ох тяжело же разрабам.
29 дек 09, 16:16    [8133691]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
daw
а вот 2005-ый два таких Compute Scalar в ступор вводят, насколько я понимаю.

шибко специфицское сочетание такое получается, в общем...
Странно, просто два Compute Scalar подряд наблюдаю частенько, жаль что пример не приведу, "зацепиться" не за что, искать лень, только если походу вспомню про баг.

daw
функцию детерминированной сделать
Э-э-э. Не позорьте меня. Разве она не детерминирована?
29 дек 09, 17:03    [8134094]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Странно, просто два Compute Scalar подряд наблюдаю частенько, жаль что
> пример не приведу

угу. это, к примеру, проблем не вызывает:
select CASE WHEN X = '1' THEN 1 END from (select dbo.fnTest() X) t
а с apply почему-то "не смогла".

та ну, это я все так. интересно было просто - что ж его ломает.
вообще, конечно, искать логику в баге - есть ли смысл, и наша ли забота?

> Э-э-э. Не позорьте меня. Разве она не детерминирована?

авотфиг. schemabinding надо еще.

Posted via ActualForum NNTP Server 1.4

30 дек 09, 08:35    [8135572]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Glory
Получается, что запрос очен утрирован. Имхо.
И?
Что-то я не встречал в документации, что Microsoft не несет ответственности за выполнение "сильно утрированных" запросов. ;)
30 дек 09, 10:11    [8135896]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
daw
авотфиг. schemabinding надо еще.
Ну да, ну да.
ALTER любого ссылаемого объекта делает её недетерминированной.
30 дек 09, 12:07    [8136683]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)   Jul  9 2008 14:43:34   Copyright (c) 1988-2008 Microsoft Corporation  Express Edition with Advanced Services on Windows NT 5.1 <X86> (Build 2600: Service Pack 3) 
пашет, младшего под рукой нет проверить
-------------------------------------
Jedem Das Seine
30 дек 09, 12:47    [8137017]     Ответить | Цитировать Сообщить модератору
 Re: Dump (CROSS APPLY + CASE + Func)  [new]
Glory
Member

Откуда:
Сообщений: 104760
DeColo®es
Glory
Получается, что запрос очен утрирован. Имхо.
И?
Что-то я не встречал в документации, что Microsoft не несет ответственности за выполнение "сильно утрированных" запросов. ;)

А я не встречал таких реальных запросов
Раз падает построение плана, то можно отправлять данный пример прямиком в поддержку MS
30 дек 09, 13:20    [8137230]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить