2014-05-22 3 views
0

나는 세 개의 테이블을 가입하고 XML 파일의 값을 반환받을 INNER을 시도하고 있지만, 두 번째 또는 세 번째 테이블에서있는 값이 반환됩니다별칭 내부는 유효하지 않은 리드를 결합 열 이름

메시지로 207, 수준 16, 상태 1, 프로 시저 PROC_Generate_XML_AdForm, 줄 18 'VPrSKzNazev'열 이름이 잘못되었습니다.

메시지 레벨 16, 상태 1, 프로 시저 PROC_Generate_XML_AdForm, 라인 20 'VPrURLCZ1'열 이름이 잘못되었습니다.

메시지 레벨 16, 상태 1, 프로 시저 PROC_Generate_XML_AdForm, 라인 22 'VPrSlevaCZ1'열이 올바르지 않습니다. 여기

코드입니다 :

SELECT @xmlVar = (
    SELECT t1.IDS AS 'product_id' 
     ,t1.VPrSKzNazev AS 'product_name' 
     ,t1.VPrPodkolekce AS 'product_category_id' 
     ,'http://www.foo.com/' + t1.VPrURLCZ1 AS 'product_deeplink' 
     ,'http://www.foo.com/media-photo/' + t1.IDS + '/370/370.jpg' AS 'product_image' 
     ,CAST(ROUND((100 - t1.ProdejDPH)/100 * t1.VPrSlevaCZ1, 0) AS INT) AS 'product_price' 
    FROM SKz AS t1 
    INNER JOIN VTbProdDalsi 
     ON t1.IDS = VTbProdDalsi.VPrSKzIDS 
    INNER JOIN VTbProdDalsi2 
     ON t1.IDS = VTbProdDalsi2.VPrSKzIDS 
    WHERE t1.VPrIsMain = 1 
     AND (
      (
       SELECT SUM(SKz.StavZ - SKz.ObjedP) 
       FROM SKz 
       WHERE IDS = t1.IDS 
       ) > 0 
      OR (
       SELECT SUM(ISNULL(SKz.VPrDodPocet, 0) - SKz.ObjedP) 
       FROM SKz 
       WHERE IDS = t1.IDS 
       ) > 0 
      ) 
    FOR XML PATH('product') 
     ,ROOT('products') 
    ) 

나는 그것이 아마 이미 어딘가에 대답 있다는 생각을하지만, 내가 SQL에 새로 온 이후, 나는 대답을 적용하는 방법을 모르겠어요.

저는 Microsoft SQL Server Management Studio (SQL Server 2008 R2)에 있습니다.

답장을 보내 주셔서 감사합니다. 문제는 바로 여기에 거주하는 것처럼

+1

테이블 'SKz'의 구조는 무엇입니까 –

답변

0

해결.

솔루션은 SKz 테이블에없는 변수에 대해 조인 된 테이블 t1을 사용하지 않는 것이 었습니다.

select @xmlVar = 
    (
    select 
      t1.IDS as 'product_id', 
     VTbProdDalsi.VPrSKzNazev as 'product_name', 
     t1.VPrPodkolekce as 'product_category_id', 
     'http://www.ringit.cz/' + VTbProdDalsi2.VPrURLCZ1 as 'product_deeplink', 
     'http://www.ringit.cz/media-photo/' + t1.IDS + '/370/370.jpg' as 'product_image', 
     CAST(ROUND(t1.ProdejDPH - t1.ProdejDPH * VTbProdDalsi.VPrSlevaCZ1/100, 0) AS int) as 'product_price' 

    from SKz as t1 
     inner join VTbProdDalsi on t1.IDS = VTbProdDalsi.VPrSKzIDS 
     inner join VTbProdDalsi2 on t1.IDS = VTbProdDalsi2.VPrSKzIDS 
     where t1.VPrIsMain = 1 AND t1.VPrGledis = 1 AND 
     ((SELECT SUM(SKz.StavZ - SKz.ObjedP) FROM SKz WHERE IDS = t1.IDS) > 0 OR (SELECT SUM(ISNULL(SKz.VPrDodPocet, 0) - SKz.ObjedP) FROM SKz WHERE IDS = t1.IDS) > 0) 
    FOR XML PATH ('product'), ROOT ('products') 
)   
0

보인다 :

,t1.VPrSKzNazev AS 'product_name' 
     ,t1.VPrPodkolekce AS 'product_category_id' 
     ,'http://www.foo.com/' + t1.VPrURLCZ1 AS 'product_deeplink' 

나는 그 이름이 테이블 SKZ에있는 것과 일치해야합니다 것입니다. 또한 알아낼 수없는 경우 Skz의 열 목록을 제공 할 수 있습니까?

+0

오류가 발생하는 열은 SKz에 없습니다. 나는 그들이 조인 테이블 t1에서 당겨지기를 기대합니다. 다음 컬럼의리스트이다 COLNAME ID UsrOrder Sel을 RelSkTyp RefSklad RefStruct RefSkSkup RelDPHn RelDPHp RelSkDruh Obrat Odbyt SvazanaZas RelSKzVC AUcet Vynos Naklad IDS EAN 나 제프 나 제프 1 나 제프 2,Te xt와 SText1 SText2 MJ MJ2 MJ3 MJ2Koef MJ3Koef StavZ MinLim MINMAX Hmotnost Objem NazevRP RefSkEURO Rezer ObjedP ObjedV REKLAM NakupC NakupDPH NakupCM CMKodNC VNakup ProdejKc관련이없는 10 ProdejDPH ProdejCM CMKodPC ObjMn ObjNazev REFAD 하기 Firma PLU IObchod Obrazek Popis Popis2 + 몇 가지 다른. – user3665327

관련 문제