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

Откуда:
Сообщений: 1
С постоянной таблицей update работает

create table t
(
ID int,
s nvarchar(100)
)

update t
set s = 'aaa'
from t
join t_Active act on act.ID = t.ID
-----------------------------------------------------------------------------------
С таблицей-переменной такой же update не работает
ошибка: Must declare the scalar variable "@t".

declare @t table
(
ID int,
s nvarchar(100)
)

update @t
set s = 'aaa'
from @t
join t_Active act on act.ID = @t.ID

приходится писать так
update @t
set s = 'aaa'
from @t k
join t_Active act on act.ID = k.ID

У меня вопрос почему обязательно приходится писать алиас "k" к таблице-переменной @t.
Почему sql server откланяет запрос без синонима? Какое синтаксическое правило я нарушаю когда не указываю алиас у таблицы @t?
6 сен 11, 16:20    [11235940]     Ответить | Цитировать Сообщить модератору
 Re: update with join and tabel variable  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
RUsachek
У меня вопрос почему обязательно приходится писать алиас "k" к таблице-переменной @t.
Почему sql server откланяет запрос без синонима? Какое синтаксическое правило я нарушаю когда не указываю алиас у таблицы @t?
Почему сервер отклоняет ваш запрос? Его разработчикам так захотелось.

Привыкайте всегда и везде указывать синоним, и будет вам счастье.
6 сен 11, 16:23    [11235976]     Ответить | Цитировать Сообщить модератору
 Re: update with join and tabel variable  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
Если "взять" @t в квадратные скобки:
update @t
set s = 'aaa'
from @t
join t_Active act on act.ID = [@t].[ID]
то работает.

Видимо, сочетание "= @t" воспринимается парсером, как присвоение значения из некой скалярной переменной, которая, естественно, не объявлялась...
6 сен 11, 16:39    [11236138]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить