MS SQL建立連結伺服器 (To establish a linked server in SSMS — MS SQL)

近日處理要檢查在兩個主機的PDM與ERP系統其製程代號名稱是否不一致。之前在不同主機間互相連接資料庫查詢這樣用

SELECT MW001 AS M001, MW002 AS M002 FROM OPENROWSET(‘SQLOLEDB’, ‘(SQL Server的實例名稱)’ ; ‘(使用者)’; ‘(密碼)’,[Leader].[dbo].CMSMW)

但老是覺得冗長麻煩。於是改用 ‘連結伺服器’ 的方法。

1.建立連結的伺服器

2. 執行查詢,OK

SELECT MB001, MB002, MB003, MB004 [AAA].[Leader].[dbo].[INVMB] WHERE MB001
or
SELECT MB001, MB002, MB003, MB004 FROM AAA.Leader.dbo.INVMB WHERE MB001 LIKE 'R110%'

3. 但是執行以下時出錯了!

原因是DABA_PDM_P4與Leader資料庫定序不一樣

4. 解法:將使用遠端定序改成False

5. 執行OK! 找出一筆差異的資料

/* 本例在ERP資料庫 join PDM資料庫 
   PDM_P5為連結的PDM伺服器(主機)
*/
WITH MW AS
(
  SELECT MW001 AS M001, MW002 AS M002 FROM CMSMW -- ERP製程代號資料表
)
SELECT pnoproc_no AS PDM_製程代號, pnoproc_name AS PDM_製程名稱, M001 AS GP_製程代號, M002 AS GP_製程名稱
FROM MW JOIN [PDM_P5].[DABA_PDM].[dbo].[GP_PnoProc] -- PDM製程代號資料表
ON pnoproc_no = M001
WHERE pnoproc_name <> M002

Tagged:

發表留言