2015-11-12 45 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

相关问题