Oracle查询转SQL Server遇Msg102语法错误求助
排查SQL Server语法错误的解决方案
首先,咱们来拆解你遇到的Msg 102错误——根源就在第一行的Begin importing data:SQL Server里的BEGIN是用来定义事务块或流程控制块的关键字(必须配合END使用),你这里想表达的是“开始导入数据”的注释,却误用了BEGIN关键字,这直接触发了语法报错。
接下来咱们逐条修正你的语句,同时解决其他隐藏的小问题:
1. 修正开头的注释逻辑
把错误的Begin importing data换成标准的注释形式,用--单行注释或者/* ... */多行注释来标注操作说明就行。
2. 统一表名的不一致问题
你先执行了DROP TABLE VISION_REALMAST1,但后面SELECT * INTO的目标表是dbo.VISION_REALMAST,可后续的DELETE和UPDATE操作的却是VISION_REALMAST1,这明显是表名写错了,得统一成同一个表名。
3. 替换中文标点
最后一行UPDATE语句结尾的逗号是中文逗号,SQL Server会识别为无效字符,直接删掉或者换成英文逗号就行(这里其实不需要逗号)。
修正后的完整SQL语句:
-- Begin importing data: Import Realmast USE TAXPAYER; GO -- Drop existing table if it exists DROP TABLE IF EXISTS dbo.VISION_REALMAST1; GO -- Import data from linked server SELECT * INTO dbo.VISION_REALMAST1 FROM [TOMSQLVISION].[VISION_2020].[REAL_PROP].[REALMAST]; GO -- Delete records where REM_INET_SUPPRESS = 1 DELETE FROM dbo.VISION_REALMAST1 WHERE REM_INET_SUPPRESS = 1; GO -- Update the GIS ID field UPDATE dbo.VISION_REALMAST1 SET REM_GIS_ID = CAST(CAST(REM_MBLU_MAP AS INT) AS VARCHAR(20)) + '-' + CAST(CAST(REM_MBLU_BLOCK AS INT) AS VARCHAR(20)); GO
额外优化提示:
- 加上
GO批处理分隔符,确保SQL Server逐批执行语句,避免跨批的语法冲突; - 使用
DROP TABLE IF EXISTS替代单纯的DROP TABLE,可以避免表不存在时的报错; - 如果后续导入数据时仍有问题,记得检查链接服务器
TOMSQLVISION的配置是否正确,但当前的语法错误已经全部解决啦。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

