Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / скрытые отличия 7 и 8 или таки RTFM? / 3 сообщений из 3, страница 1 из 1
26.06.2002, 17:48:47
    #32034029
unknown
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрытые отличия 7 и 8 или таки RTFM?
Добрый день!

есть запрос:
set nocount on
begin tran

select Id=1,Value=100
into #q
union all
select 2,200
union all
select 3,300

select * from #q

update #q
set #q.value=#q.value+t.value
from
(select Id=1,Value=100
union all
select 1,200
union all
select 1,300
union all
select 1,400) t
where #q.id=t.id

select * from #q

rollback tran

на 7 результат такой:
Id Value
----------- -----------
1 100
2 200
3 300

Id Value
----------- -----------
1 1100<<<<<<<<<
2 200
3 300

а на 8 такой:
Id Value
----------- -----------
1 100
2 200
3 300

Id Value
----------- -----------
1 500<<<<<<<<<<<<<<<<<<<
2 200
3 300

где можно о таком прочитать? или учиться пользоваться поиском:-(
...
Рейтинг: 0 / 0
26.06.2002, 18:51:17
    #32034047
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрытые отличия 7 и 8 или таки RTFM?
У меня получается несколько другой результат
id value
----------- -----------
1 100
2 200
3 300

id value
----------- -----------
1 500 <<<<<<<<<
2 200
3 300

Но суть не в этом. Вы же сами создаёте неопределённую ситуацию и не исключено что даже один и тот же сервер будет выдавать в зависимости от каких-то своих соображений (скорее всего от физического расположения записей в таблице) разные результаты.
А что Вы собственно хотели получить?
...
Рейтинг: 0 / 0
26.06.2002, 19:06:51
    #32034052
Александр Степанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
скрытые отличия 7 и 8 или таки RTFM?
К сожалению, под рукой нет BOL от версии 7.0, так что привожу только цитату из BOL 2000 (Update):

Результаты Update неразрешимы в случае, если присутствует оператор From, не описанный таким образом, чтобы только одно значение было доступным для каждой обновляемой колонки (другими словами, если выражение Update недетерминировано). Например, для выражения, Update, данного в приведенном скрипте, обе строки в таблице s отвечает условиям оператора From в выражении Update, но неизвестно, какую именно строку из таблицы s использовать для обновления строки таблицы t .

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE TABLE s (ColA INT, ColB DECIMAL( 10 , 3 ))
GO
CREATE TABLE t (ColA INT PRIMARY KEY, ColB DECIMAL( 10 , 3 ))
GO
INSERT INTO s VALUES( 1 ,  10 . 0 )
INSERT INTO s VALUES( 1 ,  20 . 0 )
INSERT INTO t VALUES( 1 ,  0 . 0 )
GO
UPDATE t 
SET t.ColB = t.ColB + s.ColB
FROM t INNER JOIN s ON (t.ColA = s.ColA)
GO


Что интересно, приведенный в BOL пример работает одинаково на обоих версиях (7.0 и 2000), и разница между ними проявляется только в случае замены джойна с таблицей s в операторе From на подзапрос, состоящий из операторов Select с константами, объединенных с помощью UNION или UNION ALL. В случае 7.0 суммирование происходит с полем из всех строк, в случае 2000 - только с одной.

Интересное поведение! Спасибо за наводку.

С уважением,
Александр Степанов
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / скрытые отличия 7 и 8 или таки RTFM? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]