SQL JOIN OPENQUERY 协助

问题描述

寻求有关处理以下问题的最佳方法的建议

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] 
),'select CONVERT(ID,CHAR) AS ID,TBL2.[NAME] 
FROM TBL1 Left Outer join TB2 ON TBL1.ID = TBL2.ID 

这会导致显示 TBL1.ID 值,但所有 TBL2.Name 值都为 NULL

解决方法

选项 1:尝试在房子的 MySQL 端将 INT 转换为 varchar。尝试在传递给 LinkedServer 的 sql 语句中正确执行。

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 

另一个选项当然是相反的(如果你想通过INT加入)

WITH TBL1 as 
( 
SELECT CAST(ISNULL(TRIM([Results]),'0') AS INT) as 'ID' 
FROM [DB].[results] 
),'select ID,TBL2.[NAME] 
FROM TBL1 Left Outer join TB2 ON TBL1.ID = TBL2.ID 
,

你的语法看起来不对。 DB C 来自哪里? DB 不是架构名称吗?

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 TBL2 left outer JOIN TBL1 ON try_cast(TBL1.ID as int) = TBL2.ID;
,

感谢大家的帮助。这就是它工作的原因:

WITH TBL1 AS (
    SELECT REPLACE(REPLACE(ID,CHAR(13),''),CHAR(10),'') 
    FROM DB
    WHERE ISNUMERIC(REPLACE(REPLACE(ID,'')) = 1

),TBL2 AS (
    SELECT *
    FROM OpenQuery(
        LINKEDSERVER,'SELECT id,name FROM DB'
    )
)
SELECT 
    TBL1.ID,TB2.Name
FROM TBL2
LEFT OUTER JOIN TBL1 ON TBL1.ID = TBL2.id

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...