SQL Server UPDATE查询语法报错(Msg 102)问题排查
问题分析与解决方案
这个语法错误的核心原因是SQL Server不支持在UPDATE关键字后的表名直接跟别名(也就是你写的UPDATE D_date a里的a不符合SQL Server的语法规范)。
在SQL Server中,如果你想给更新的表起别名,必须在FROM子句中定义这个别名,然后通过UPDATE引用该别名,或者直接更新原表名同时在FROM里关联别名表。
修正后的两种写法:
写法1:更新原表名,在FROM中关联别名表
UPDATE D_date SET d_date_key = b.d_date_key, full_date = b.full_date, day_of_week = b.day_of_week, day_of_week_display = b.day_of_week_display, fiscal_day_number = b.fiscal_day_number FROM D_date a JOIN dbo.[2017 Calendar update] b ON a.d_date_key = b.d_date_key;
写法2:直接更新已定义的别名(推荐,更清晰)
UPDATE a SET d_date_key = b.d_date_key, full_date = b.full_date, day_of_week = b.day_of_week, day_of_week_display = b.day_of_week_display, fiscal_day_number = b.fiscal_day_number FROM D_date a JOIN dbo.[2017 Calendar update] b ON a.d_date_key = b.d_date_key;
额外说明:
- 这里用
JOIN替代原查询中的WHERE关联,是更符合SQL标准的写法,可读性和性能都更优。 - 你的原查询写法更接近MySQL的
UPDATE ... SET ... FROM ...语法,但SQL Server有自己的语法规则,别名的定义位置是关键差异点。
内容的提问来源于stack exchange,提问作者RanchiRhino
相关产品推荐
相关产品推荐

