首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server:内联接中使用的表变量

SQL Server:内联接中使用的表变量
EN

Stack Overflow用户
提问于 2010-02-03 11:46:54
回答 4查看 54.6K关注 0票数 23

下面的SQL有什么问题?在JOIN子句中可以不使用表变量吗?

错误消息为"Msg 170,Level 15,State 1,Line 8 Line 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)

谢谢。

EN

回答 4

Stack Overflow用户

发布于 2010-02-03 11:49:46

将最后一条语句更改为:

UPDATE t1, temp
SET t1.SportName = temp._SportName
FROM tblSport AS t1
INNER JOIN @t AS temp
    ON t1.Lang = temp._Lang

(需要检查准确的语法)

票数 20
EN

Stack Overflow用户

发布于 2010-02-03 18:01:53

Justin的答案在语法上是正确的-您需要为临时表分配一个别名(2008年的表类型变量也是如此)。

但是,请注意,表变量和表型变量都没有任何与其相关的统计信息,因此可能导致查询优化器在执行计划方面做出非常可疑的选择(因为它总是估计表变量包含1行-因此通常选择嵌套循环作为连接操作符)。

票数 9
EN

Stack Overflow用户

发布于 2010-02-03 14:41:10

您的别名t1在错误的位置

UPDATE
    t1 
SET 
    SportName = @t._SportName
FROM 
    @t INNER JOIN tblSport t1 ON (t1.Lang = @t._Lang)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2189551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档