Ответ 1
Измените свой последний оператор на:
UPDATE t1, temp
SET t1.SportName = temp._SportName
FROM tblSport AS t1
INNER JOIN @t AS temp
ON t1.Lang = temp._Lang
(нужно проверить точный синтаксис)
В чем проблема со следующим SQL. Может ли переменная таблицы не использоваться в предложении JOIN?
Ошибка msg имеет значение "Msg 170, уровень 15, состояние 1, строка 8 строка 8: неправильный синтаксис рядом с" t1 ".
Declare @t TABLE (
_SportName varchar(50),
_Lang varchar(3)
)
insert @t VALUES('Basketball', 'ENG') -- ENG
UPDATE tblSport t1
SET
t1.SportName = @t._SportName
FROM
@t INNER JOIN tblSport ON (t1.Lang = @t._Lang)
Спасибо.
Измените свой последний оператор на:
UPDATE t1, temp
SET t1.SportName = temp._SportName
FROM tblSport AS t1
INNER JOIN @t AS temp
ON t1.Lang = temp._Lang
(нужно проверить точный синтаксис)
Кроме того, что псевдоним t1 находится не в том месте, никто не упомянул об использовании квадратных скобок вокруг переменной таблицы вместо псевдонима. Также будет изменено изменение оператора обновления на следующее:
UPDATE t1
SET
t1.SportName = [@t]._SportName
FROM
@t INNER JOIN tblSport t1 ON t1.Lang = [@t]._Lang
[Протестировано на SQL Server 2005.]
Ответ Justin корректно синтаксически - вам нужно назначить псевдоним для таблицы temp (такой же для переменных типа таблицы в 2008 году).
Однако имейте в виду, что ни переменные таблицы, ни переменные таблицы не имеют какой-либо статистики, связанной с ними, и поэтому могут заставить оптимизатор запросов сделать очень сомнительный выбор в отношении планов выполнения (поскольку он всегда будет оценивать, что переменная таблицы содержит 1 строку - и поэтому обычно выбирает вложенные петли в качестве оператора объединения).
Ваш псевдоним t1
находится не в том месте
UPDATE
t1
SET
SportName = @t._SportName
FROM
@t INNER JOIN tblSport t1 ON (t1.Lang = @t._Lang)
не забывайте использовать alias
для таблиц переменных
Declare @t TABLE (
_SportName varchar(50),
_Lang varchar(3)
)
insert @t VALUES('Basketball', 'ENG') -- ENG
UPDATE t1
SET
t1.SportName = t2._SportName
FROM tblSport t1 INNER JOIN
@t as t2 ON (t1.Lang = t2._Lang)