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

Откуда: Vilnius
Сообщений: 701
1. update dbo.XXX
set column= 1
from dbo.XXX a
join dbo.XXX b on a.a_ID = b.B_ID


2. update XXX
set column= 1
from dbo.XXX a
join dbo.XXX b on a.a_ID = b.B_ID

Почему в первом случае генеруется ошибка?
Msg 8154, Level 16, State 1, Procedure XXX, Line 226
The table 'dbo.XXX' is ambiguous.
11 ноя 09, 11:22    [7912472]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение компилятора  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36802
Т.е. в первом случае сервер должен угадать, какую запись в таблице dbo.XXX апдейтить?
11 ноя 09, 11:25    [7912488]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение компилятора  [new]
Влом регистрироваться
Guest
mos,

лучше пишите так:

update a -- или b
11 ноя 09, 11:27    [7912508]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение компилятора  [new]
Glory
Member

Откуда:
Сообщений: 104760
BOL - UPDATE
FROM <table_source>

If the object being updated is the same as the object in the FROM clause and there is only one reference to the object in the FROM clause, an object alias may or may not be specified. If the object being updated appears more than one time in the FROM clause, one, and only one, reference to the object must not specify a table alias. All other references to the object in the FROM clause must include an object alias.
11 ноя 09, 11:28    [7912522]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение компилятора  [new]
mos
Member

Откуда: Vilnius
Сообщений: 701
Влом регистрироваться
mos,

лучше пишите так:

update a -- или b


Нельзя использовать alias для таблицы которую update
11 ноя 09, 11:32    [7912552]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение компилятора  [new]
Влом регистрироваться
Guest
mos,

да ну?

DECLARE @xxx TABLE
(
	ID INT,
	Name VARCHAR(10)
)

UPDATE a
SET
	Name = b.Name
FROM
	@xxx a
	INNER JOIN @xxx b ON a.ID = b.ID
11 ноя 09, 11:36    [7912586]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение компилятора  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33342
Блог
mos,

да ну?
11 ноя 09, 11:36    [7912593]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение компилятора  [new]
mos
Member

Откуда: Vilnius
Сообщений: 701
вообще не понятно что на что update, читабельность никакая
11 ноя 09, 11:38    [7912605]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение компилятора  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33342
Блог
mos
1. update dbo.XXX
set column= 1
from dbo.XXX a
join dbo.XXX b on a.a_ID = b.B_ID


2. update XXX
set column= 1
from dbo.XXX a
join dbo.XXX b on a.a_ID = b.B_ID

Почему в первом случае генеруется ошибка?
Msg 8154, Level 16, State 1, Procedure XXX, Line 226
The table 'dbo.XXX' is ambiguous.


ошибка кстати в обоих случаях, mssql2008
11 ноя 09, 11:40    [7912616]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение компилятора  [new]
Влом регистрироваться
Guest
mos,

напротив, совершенно четко определено, что именно апдейтится.

В вашем втором случае тоже до конца непонятно, какие записи будут апдейтиться.
11 ноя 09, 11:41    [7912626]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение компилятора  [new]
Glory
Member

Откуда:
Сообщений: 104760
mos
вообще не понятно что на что update, читабельность никакая

Потому что вы натыркали в запрос много лишних раз имя таблицы
11 ноя 09, 11:44    [7912648]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить