[英]SQL JOIN OPENQUERY Assistance
尋求有關處理以下問題的最佳方法的建議
TBL1(本地 SQL DB)其中 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 的所有 NULLS。
嘗試了以下操作:
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
選項 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]
),
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
您的語法看起來不正確。 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, CHAR(13), ''), CHAR(10), '')) = 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.