2015-11-12 43 views
1

我正在從2005年升級到SQL Server 2012,遇到了一個我需要幫助的語法錯誤。語法錯誤實際上是在2000年構建的數據庫中,因此兼容性問題無法在設置中修復。SQL 2005到2012

Select  PPB.*,  

    SUBSTRING(STUFF((select license_id as k --* 
    FROM LMACatscan..license AS L 
      WHERE L.archived = 0 
       AND ((L.ppb_id IN (SELECT ppb_id FROM LMACatscan..ppb WHERE ppb_id = PPB.ppb_id)) 
       OR (L.ppb_id_2 IN (SELECT ppb_id FROM LMACatscan..ppb WHERE ppb_id = PPB.ppb_id))) 
       FOR XML PATH('')),1,0,''),2,999999)  
       FROM LMACatscan..ppb AS PPB  
       WHERE state_code > '' 

從2005年的結果是:enter image description here 從20012你可以看到一個沒有名字列有所有行和值相同,這是問題的所在:enter image description here與往常一樣,任何幫助表示讚賞!

回答

1

好了,問題就出在這裏:

((L.ppb_id IN (SELECT ppb_id FROM LMACatscan..ppb WHERE ppb_id = PPB.ppb_id)) 
OR (L.ppb_id_2 IN (SELECT ppb_id FROM LMACatscan..ppb WHERE ppb_id = PPB.ppb_id))) 

它在做什麼是選擇一切從license_id列,其中無論是ppb_id或ppb_id_2是在PPB表的ppb_id列。這意味着你串聯每場比賽的每一行(即使ppb_id在許可表中不存在,它仍然會顯示這個在該行)

這應該修復它:

SELECT PPB.*, 
    SUBSTRING(STUFF((SELECT license_id k 
     FROM LMACatscan..license L 
     WHERE (L.ppb_id = PPB.ppb_id 
     OR L.ppb_id_2 = PPB.ppb_id) 
     AND L.Archived = 0 
     FOR XML PATH('')),1,0,''),2,999999) 
FROM LMACatscan..ppb PPB 
WHERE state_code > '' 

順便說一句,這個東西聲明實際上什麼都不做。如果你喜歡,你可以刪除它。

SELECT PPB.*, 
    SUBSTRING((SELECT license_id k 
     FROM license L 
     WHERE (L.ppb_id = PPB.ppb_id 
     OR L.ppb_id_2 = PPB.ppb_id) 
     AND L.Archived = 0 
     FOR XML PATH('')),2,99999) 
FROM PPB 
WHERE state_code > '' 
+0

傳奇!這完美地解決了我的問題。你有沒有想過爲什麼它在2005年工作? – Bmize729

+1

我不是100%確定的,但我相信這是因爲2005年括號內的別名(PPB)沒有看括號內的PPB表,而在2008年是這樣。 例如,如果您已將括號外的表別名重命名爲PPBX,並使用PPBX.ppb_id在括號中運行相同的查詢來替換PPB.ppb_id,那麼它就會起作用。 – ZLK

+1

例如 選擇PPBX *, SUBSTRING(STUFF((選擇license_id爲k - * FROM LMACatscan..license爲L WHERE L.archived = 0 AND((L.ppb_id IN(SELECT ppb_id FROM LMACatscan。 .ppb WHERE ppb_id = PPBX.ppb_id)) OR(L.ppb_id_2 IN(SELECT ppb_id FROM LMACatscan..ppb WHERE ppb_id = PPBX.ppb_id))) FOR XML PATH('')),1,0,'' ),2,999999) FROM LMACatscan..ppb AS PPBX WHERE STATE_CODE>' (這大概也是在2008年的工作,雖然我沒有測試過) – ZLK

相關問題