使用Openquery从Oracle迁移数据至SQL Server 2019行数据匹配异常求助
OpenQuery跨库同步数据时State与City对应关系错乱问题(SQL Server 2019 vs 2013)
我尝试通过OpenQuery将Oracle服务器的table1表数据导入SQL Server的table321表,结果出现State与City的对应关系完全错乱的情况。该操作在SQL Server 2013中可正常执行,但在SQL Server 2019中出现异常。
源服务器(Oracle)数据
| State | City |
|---|---|
| NY | Syracuse |
| Florida | Orlando |
| Texas | Austin |
目标服务器(SQL Server)加载后数据
| State | City |
|---|---|
| NY | Austin |
| Florida | Syracuse |
| Texas | Orlando |
使用的Openquery语句:
INSERT INTO table321 SELECT * FROM OPENQUERY(hjgg, '' select * FROM table1'')
解决办法
- 明确指定列名,避免使用SELECT *
SQL Server 2019对OPENQUERY的列映射逻辑可能存在调整,依赖SELECT *会受两端表列顺序、驱动返回列顺序的影响,极易导致字段错位。修改后的语句如下:
INSERT INTO table321 (State, City) SELECT State, City FROM OPENQUERY(hjgg, ''select State, City FROM table1'')
这种写法强制指定字段映射关系,彻底避免列顺序不匹配的问题。
检查链接服务器的Oracle驱动版本
SQL Server 2019默认使用的Oracle ODBC/OLEDB驱动版本可能与2013不同,部分新版本驱动返回的列顺序会发生变化。可以尝试换回与SQL Server 2013环境一致的驱动版本,或者更新至最新稳定版驱动后测试。验证两端表的列定义一致性
确认Oracle的table1和SQL Server的table321的列顺序、数据类型是否完全一致。若目标表列顺序与源表相反,使用SELECT *必然会导致数据错位。
内容的提问来源于stack exchange,提问作者Datavizard
相关产品推荐
相关产品推荐

