【发布时间】:2021-01-29 04:23:55
【问题描述】:
寻找解决以下问题的最佳方法的建议
TBL1(本地 SQL 数据库),其中 ID = varchar
TBL2(远程 MYSQL DB),其中 ID = INT
WITH TBL1 as (
SELECT
[Results] as 'ID'
FROM [DB].[results]
),
TBL2 as (
select * from openquery(LINKEDSERVER,'select ID, Name from DB')
)
Select
TBL1.[ID],
TBL2.[NAME]
FROM [DB]
left outer JOIN TBL1 ON TBL1.ID = TBL2.ID
尝试了几种不同的方法,例如 CAST/CONVERT,但最终会出现错误,例如“转换 varchar 值 '12345 时转换失败 ' 到数据类型 int。” 或为 TBL2 获取所有 NULL。
尝试了以下方法:
WITH TBL1 as
(
SELECT CAST(ISNULL([Results],'0') AS INT) as 'ID'
FROM [DB].[results]
),
TBL2 as ( select * from openquery(LINKEDSERVER,'select ID, Name from DB')
)
Select TBL1.[ID], TBL2.[NAME]
FROM TBL1 Left Outer join TB2 ON TBL1.ID = TBL2.ID
这会导致“转换 varchar 值 '12345 时转换失败 ' 到数据类型 int。"
也尝试过:
WITH TBL1 as ( SELECT [Results] as 'ID' FROM [DB].[results]
),
TBL2 as ( select * from openquery(LINKEDSERVER,'select CONVERT(ID, CHAR) AS ID, Name from DB')
)
Select TBL1.[ID], TBL2.[NAME]
FROM TBL1 Left Outer join TB2 ON TBL1.ID = TBL2.ID
这会导致显示 TBL1.ID 值,但所有 TBL2.Name 值都是 NULL
【问题讨论】:
-
例如:================== WITH TBL1 as ( SELECT [Results] as 'ID' FROM [DB].[results] ) , TBL2 as ( select * from openquery(LINKEDSERVER,'select ID, Name from DB') ) Select TBL1.[ID], TBL2.[NAME] FROM [DB] AS C left outer JOIN TBL1 ON CAST(TBL1.ID as INT) = TBL2.ID ================== 这导致错误:“将 varchar 值 '12345' 转换为数据类型 int 时转换失败。”其他示例我们尝试将 TBL2.ID 转换为 varchar 并返回结果,但是 Name 列包含所有空值
-
不要在 cmets 中添加事实,更新问题文本。
-
使用
WITH TBL1 as (SELECT CAST([Results] AS INT) as 'ID'。 -
这导致“将varchar值'12345'转换为数据类型int时转换失败。”
-
如果是这样,请检查该值 - 可能它包含另一个不可打印字符的多余空格。 PS。精确指定本地 DBMS,包括精确版本。还要检查 OPENQUERY 参数中的
'select CAST(ID AS CHAR), Name from DB'是否解决。
标签: mysql sql linked-server openquery