以下SQL有什么问题.表变量是否可以在JOIN子句中使用?
错误消息是"消息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)
Run Code Online (Sandbox Code Playgroud)
谢谢.
Jus*_*ner 18
将您的上一个陈述更改为:
UPDATE t1, temp
SET t1.SportName = temp._SportName
FROM tblSport AS t1
INNER JOIN @t AS temp
ON t1.Lang = temp._Lang
Run Code Online (Sandbox Code Playgroud)
(需要检查确切的语法)
tak*_*krl 14
除了t1别名在错误的地方之外,没有其他人提到在表变量周围使用方括号而不是别名.将update语句更改为以下内容也可以:
UPDATE t1
SET
t1.SportName = [@t]._SportName
FROM
@t INNER JOIN tblSport t1 ON t1.Lang = [@t]._Lang
Run Code Online (Sandbox Code Playgroud)
[在SQL Server 2005上测试过.]
Justin的答案在语法上是正确的 - 您需要为临时表分配一个别名(2008年的表类型变量也是如此).
但是,请注意,表变量和表类型变量都没有与之关联的任何统计信息,因此可能导致查询优化器对执行计划做出非常可疑的选择(因为它总是会估计表变量包含1行 - 因此通常选择嵌套循环作为连接运算符).