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

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
+
CREATE TABLE at(i int PRIMARY KEY CLUSTERED)
CREATE TABLE at1(i int PRIMARY KEY CLUSTERED, ji int, Data date, ii int)

ALTER TABLE at1  WITH CHECK ADD  CONSTRAINT [FK_asdasdasd] FOREIGN KEY(ji) REFERENCES at (i)
GO

ALTER TABLE at1 CHECK CONSTRAINT [FK_asdasdasd]
GO

INSERT INTO at
SELECT 10
UNION ALL 
SELECT 8

INSERT INTO at1
SELECT 99, 10, '19000101',1
UNION ALL 
SELECT 98, 8, '20150101',2

---------------------------------
DECLARE @cnt int = 0

SELECT @cnt = @cnt + a.i
FROM at a
 INNER JOIN at1 a1
	ON a.i = a1.ji

SELECT @cnt
---------------------------------
SET @cnt = 0

SELECT @cnt = @cnt + a.i
FROM at a
 INNER JOIN at1 a1
	ON a.i = a1.ji
ORDER BY ii

SELECT @cnt
---------------------------------

DROP TABLE at1
DROP TABLE at

запрос суммирует значение поля i таблицы at
при наличии ORDER BY по полям Data или ii второй таблицы(at1) - результат не верный
воспроизводится на 2012 и 2008 серверах
12 мар 15, 16:50    [17376670]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Гадя Петрович
при наличии ORDER BY по полям Data или ii второй таблицы(at1) - результат не верный

Смотрите в плане выполнения порядок операций. И все станет ясно

И суммировать надо агрегатными функциями, а недокументированными методами.
12 мар 15, 16:52    [17376691]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
ЗЫ судя по плану запроса, сортировка производится уже после Compute Scalar, что, собственно, логично
каким боком оно влияет на результат - не понятно
12 мар 15, 16:53    [17376697]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
Glory
И суммировать надо агрегатными функциями, а недокументированными методами.
это я знаю, на такое поведение напоролся в результате переписывания стороннего кода
12 мар 15, 16:53    [17376702]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Есть у меня подозрение, что поведение, которое вы хотите полчить, не документировано и не гарантируется.
Во всяком случае, не вижу ни одной причины писать так вместо того, чтобы использовать агрегатные функции.

Сообщение было отредактировано: 12 мар 15, 16:56
12 мар 15, 16:55    [17376720]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
ЗЫ ЗЫ если сортировать по внешнему ключу - результат верный
12 мар 15, 16:55    [17376721]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Гадя Петрович
Glory
И суммировать надо агрегатными функциями, а недокументированными методами.
это я знаю, на такое поведение напоролся в результате переписывания стороннего кода

Этому методу и фиче лет 15 уже. И регулярно на форуме появляются вопросы про них.
12 мар 15, 16:56    [17376725]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
Glory
Гадя Петрович
пропущено...
это я знаю, на такое поведение напоролся в результате переписывания стороннего кода

Этому методу и фиче лет 15 уже. И регулярно на форуме появляются вопросы про них.
галочку то я себе уже поставил, чтоб такое не использовать
хотя, и до этого не использовал :)
видимо, всё таки нечто вроде бага
12 мар 15, 16:59    [17376747]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Гадя Петрович
видимо, всё таки нечто вроде бага

Бага - это когда _документированный_ способ в каких то случаях работает неправильно.
А работа недокументированного способа не может быть багой потому, что нигде не написано, что это вообще должно работать.
12 мар 15, 17:01    [17376767]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
Glory
Гадя Петрович
видимо, всё таки нечто вроде бага

Бага - это когда _документированный_ способ в каких то случаях работает неправильно.
А работа недокументированного способа не может быть багой потому, что нигде не написано, что это вообще должно работать.
способ мутный, но неоднозначность поведения сервера я лично склонен считать багом
работа с переменными прекрасно документирована, сортировка тоже, ошибок никаких не выдается
12 мар 15, 17:06    [17376801]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Гадя Петрович
на 2012
Использовать SUM()OVER(ORDER BY)
12 мар 15, 17:07    [17376810]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Гадя Петрович
но неоднозначность поведения сервера я лично склонен считать багом

Процитируйте какое документированное поведение у вас нарушается

Гадя Петрович
работа с переменными прекрасно документирована,

Ссылка/цитата из хелпа ?
12 мар 15, 17:08    [17376812]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Гадя Петрович
Glory
пропущено...

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

BOL
SELECT @local_variable is typically used to return a single value into the variable. However, when expression is the name of a column, it can return multiple values. If the SELECT statement returns more than one value, the variable is assigned the last value that is returned.
12 мар 15, 17:09    [17376822]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
Glory
Процитируйте какое документированное поведение у вас нарушается
я говорю не о нарушении, а о неоднозначности
Glory
Ссылка/цитата из хелпа ?
https://technet.microsoft.com/ru-ru/library/ms187953(v=sql.105).aspx?f=255&MSPPError=-2147217396

ЗЫ спор беспредметен, раз это не фича и внятного объяснения нет, на этом всем спасибо
12 мар 15, 17:10    [17376831]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Гавриленко Сергей Алексеевич
Гадя Петрович
пропущено...
способ мутный, но неоднозначность поведения сервера я лично склонен считать багом
работа с переменными прекрасно документирована, сортировка тоже, ошибок никаких не выдается

BOL
SELECT @local_variable is typically used to return a single value into the variable. However, when expression is the name of a column, it can return multiple values. If the SELECT statement returns more than one value, the variable is assigned the last value that is returned.
Присваивается последнее значение и суммируется в порядке ORDER BY - это разный смысл.
12 мар 15, 17:12    [17376847]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Гадя Петрович
Glory
Ссылка/цитата из хелпа ?
https://technet.microsoft.com/ru-ru/library/ms187953(v=sql.105).aspx?f=255&MSPPError=-2147217396

И где там про конструкцию SELECT @cnt = @cnt + a.i FROM ?
SELECT из таблицы - это не работа с локальными переменными.


Гадя Петрович
я говорю не о нарушении, а о неоднозначности

О неоднозначности можно говорить, когда вы знаете, как это _должно_ работать.
А не когда вы говорите, я считаю, что так работает
12 мар 15, 17:13    [17376854]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
Glory
О неоднозначности можно говорить, когда вы знаете, как это _должно_ работать.
А не когда вы говорите, я считаю, что так работает
о неоднозначности можно говорить, когда синтаксически правильная конструкция выдает непредсказуемый результат
12 мар 15, 17:15    [17376868]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
ой, я же уже попрощался :)
12 мар 15, 17:15    [17376870]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
o-o
Guest
Гадя Петрович
работа с переменными прекрасно документирована, сортировка тоже, ошибок никаких не выдается

о недокументированных сборах в переменную:
CONNECT: In Variable concatenation and order by filters results (like where condition)

PRB: Execution Plan and Results of Aggregate Concatenation Queries Depend Upon Expression Location

если у кого не открывается connect:

The behavior you are seeing is by design. Using assignment operations (concatenation in this example) in queries with ORDER BY clause has undefined behavior. This can change from release to release or even within a particular server version due to changes in the query plan. You cannot rely on this behavior even if there are workarounds.
12 мар 15, 17:17    [17376884]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Гадя Петрович
ой, я же уже попрощался :)

Вы думаете, что вы последний с таким вопросом ?
12 мар 15, 17:17    [17376892]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
o-o
Гадя Петрович
работа с переменными прекрасно документирована, сортировка тоже, ошибок никаких не выдается

о недокументированных сборах в переменную:
CONNECT: In Variable concatenation and order by filters results (like where condition)

PRB: Execution Plan and Results of Aggregate Concatenation Queries Depend Upon Expression Location

если у кого не открывается connect:

The behavior you are seeing is by design. Using assignment operations (concatenation in this example) in queries with ORDER BY clause has undefined behavior. This can change from release to release or even within a particular server version due to changes in the query plan. You cannot rely on this behavior even if there are workarounds.
вот это я понимаю, ответ!
большое спасибо!
12 мар 15, 17:21    [17376912]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Гадя Петрович
вот это я понимаю, ответ!

Обратите внимание на дату статьи в КB и на версии серверов
12 мар 15, 17:23    [17376926]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
o-o
Guest
Glory,

я вижу, что ничего не поменялось с тех пор,
но могу и посвежее поискать, подумаешь :)

a ссылку на KB, относящееся к 7.0 и 2000, дал не кто-то и не где-то,
а MS-овщик на том самом коннекте в 2008-ом году.
ссылка на ту статью с connect-а выше.
нажалуйтесь ему, накрайняк :)
12 мар 15, 17:34    [17377016]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Glory
Member

Откуда:
Сообщений: 104760
o-o
я вижу, что ничего не поменялось с тех пор,
но могу и посвежее поискать, подумаешь :)

Поищите лучше в ситаксисе SELECT описание разрешенных конструкций в списке выходных полей
12 мар 15, 17:37    [17377045]     Ответить | Цитировать Сообщить модератору
 Re: баг или фича?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
Гадя Петрович
Glory
О неоднозначности можно говорить, когда вы знаете, как это _должно_ работать.
А не когда вы говорите, я считаю, что так работает
о неоднозначности можно говорить, когда синтаксически правильная конструкция выдает непредсказуемый результат

select * from table - тоже синтаксически правильная конструкция и внезапно выдает непредсказуемый результат в плане порядка выдачи строк.
12 мар 15, 17:47    [17377133]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить