2016-03-15 104 views
1

我想創建使用SQL表和表從鏈接的Oracle數據庫&視圖如下MS SQL鏈接Oracle服務器的連接條件

SELECT empv.FULL_NAME, 
     CAST(C_Date + ' ' + SUBSTRING(C_Time, 1, 2) + ':' + SUBSTRING(C_Time, 3, 2) + ':' 
     + SUBSTRING(C_Time, 5, 2) AS DATETIME) AS "PUNCH_TIME", 
     tT.C_Name "MACHINE_NAME", 
     CASE 
      WHEN LEN(L_UID) < 4 THEN RIGHT('0000' + CAST(L_UID AS VARCHAR(4)), 4) 
      ELSE CAST(L_UID AS VARCHAR(10)) 
     END AS "EMPLOYEE_NUMBER", 
     CASE L_MODE 
      WHEN 1 THEN 0 
      WHEN 2 THEN 1 
      ELSE L_MODE 
     END AS "PUNCH_TYPE", 
     CASE L_RESULT 
      WHEN 0 THEN 'S' 
      ELSE 'E' 
     END AS "PUNCH_RESULT" 
FROM tEnter T, 
    tTerminal tT, 
    [PRODBAK]..APPS.XXFPEMPVIEW empv 
WHERE 1 = 1 
    AND tT.L_ID = T.L_TID 
    AND L_UID <> -1 
    AND empv.EMPLOYEE_NUMBER = T.L_UID 
    /* AND CAST(GETDATE() AS DATE) BETWEEN empv.effective_start_date and COALESCE(effective_end_date, CAST(getdate() as date))*/ 
    AND CAST(C_Date + ' ' + SUBSTRING(C_Time, 1, 2) + ':' + SUBSTRING(C_Time, 3, 2) + ':' + SUBSTRING(C_Time, 5, 2) AS DATETIME) 
     BETWEEN empv.effective_start_date AND COALESCE(effective_end_date, CAST(GETDATE() AS DATE)) 
    AND CAST(C_Date + ' ' + SUBSTRING(C_Time, 1, 2) + ':' + SUBSTRING(C_Time, 3, 2) + ':' + SUBSTRING(C_Time, 5, 2) AS DATETIME) 
     > '01/01/2016 00:00:00 AM' 
GO 

現在我有一些問題,MS SQL表具有SQL部分很少用戶標識值(L_UID)與鏈接的Oracle表可用的EMPLOYEE_NUMBER列值不匹配。這導致腳本運行很長時間,最終由於未找到值而放棄。我如何克服這種情況?我對MS SQL非常陌生,JOIN語法在這個時候對我來說很陌生。

回答

1

嘗試的更換:

FROM tEnter T, 
    tTerminal tT, 
    [PRODBAK]..APPS.XXFPEMPVIEW empv 
WHERE 1 = 1 
    AND tT.L_ID = T.L_TID 
    AND L_UID <> -1 
    AND empv.EMPLOYEE_NUMBER = T.L_UID 

隨着

.... 
FROM tEnter T 
LEFT JOIN tTerminal tT ON tT.L_ID = T.L_TID 
Left JOIN [PRODBAK]..APPS.XXFPEMPVIEW empv ON empv.EMPLOYEE_NUMBER = T.L_UID 

WHERE L_UID <> -1 
... 
+0

您的解決方案的工作!謝謝 –