Какова проблема со следующим SQL. Разве табличная переменная не может использоваться в пункте СОЕДИНЕНИЯ?
Сообщение об ошибке имеет "Сообщение 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
SportName = @t._SportName
FROM
@t INNER JOIN tblSport t1 ON (t1.Lang = @t._Lang)
Не следует переносить элементы/теги блоков (например, < div >
) в встроенные тэги (например, < a >
). Это требует неприятностей.
Именно так работают перечисления в .NET. Перечисление не является ограничительным набором значений, это действительно просто набор имен для чисел (и тип, чтобы собрать эти имена вместе) - и я согласен, что иногда это боль.
Если необходимо проверить, действительно ли значение определено в перечислении, можно использовать Enum.IsDefined
после анализа. Если вы хотите сделать это более безопасным способом, вы можете посмотреть на мой проект Unconstrained Melody , который содержит множество ограниченных общих методов.
Ответ Джастина корректен синтаксически - необходимо назначить псевдоним временной таблице (то же самое для переменных табличного типа в 2008 году).
Однако имейте в виду, что ни табличные переменные, ни табличные переменные не имеют никакой статистики, связанной с ними, и поэтому могут привести к тому, что оптимизатор запросов сделает очень сомнительный выбор в отношении планов выполнения (потому что он всегда будет оценивать, что табличная переменная содержит 1 строку - и поэтому обычно выбирает вложенные циклы в качестве оператора соединения).