2013-02-16 3 views
0

У меня есть XML из текстового файла я получил странную ошибку (для меня) Существуют 2 клиентов и 6 продуктов на текстовый файлНужна помощь XML из текста

, как является

Результата набор

CUSTID ORDER ID    
98295 29199752211 0 1 2321 
98295 29199752211 0 1 76 
98295 29199752211 0 2 179 
98295 29199752211 0 3 180 
98295 29199752211 0 4 320 
98295 29199752211 0 5 NULL 

Почему cust id такой же? в текстовом файле 2. я буду рад, если смогу воспользоваться некоторой помощью.

 SELECT 
      (SELECT LNGNO FROM ARTUT13.DBO.TBLFATURA WHERE TXTOZELKOD=(c6.value('(//FISLER/FIS/FISID)[1]','VARCHAR(100)'))),--[LNGNO] 
      0,--[BYTTUR] 
      c6.value('(KALEMNO)[1]','VARCHAR(100)'),--[LNGKALEMSIRA] 
      (SELECT LNGKOD FROM ARTUT13.DBO.TBLURUN WHERE TXTKOD=(c6.value('(URUNKODU)[1]','VARCHAR(100)'))), 
      c6.value('(MIKTAR)[1]','VARCHAR(100)'),--[DBLMIKTAR] 
      1,--[BYTBIRIMSIRA] 
      1,--[DBLCEVRIM] 
      c6.value('(BIRIMFIYAT)[1]','VARCHAR(100)'),--[DBLBIRIMFIYAT] 
      0,--[BYTKAYITTIP] 
      0,--[BYTDETAYMAL] 
      c6.value('(KDV)[1]','VARCHAR(100)'),--[DBLKDVORANI] 
      c6.value('(FIYAT)[1]','VARCHAR(100)'),--[DBLNETFIYAT] 
      '',--[TXTOZELKOD] 
      0,--[LNGVADEGUNU] 
      GETDATE(),--[TRHSONISLEMTARIHI] 
      'MUHASEBE2',--[TXTSONISLEMHOST] 
      '',--[DBLOTV] 
      c6.value('(//FISLER/FIS/FISID)[1]','VARCHAR(100)'),--[TXTOZELKOD1] 
      ''--[TXTOZELKOD2] 
     from 
     (select cast(c1 as xml) from OPENROWSET (BULK 'C:\AKTAR\FATURA.txt',SINGLE_BLOB 
     ) as T1(c1))as T2(c2) 
     outer apply c2.nodes('FISLER/FIS/KALEMLER/KALEM') T6(c6) 

Текстовый файл содержит

<FISLER> 
     <FIS> 
      <FISTIPI>SATIS</FISTIPI> 
      <FISID>29199752211</FISID> 
      <FISNO>a67502</FISNO> 
      <IPTAL>0</IPTAL> 
      <TARIH>13.02.2013</TARIH> 
      <MUSKODU>35170339P</MUSKODU> 
      <MUSADI>MEHMET PEHLIVAN - MORTAN GIDA MEHMET PEHLIVAN</MUSADI> 
      <VERGIDAIRESI>KARABURUN MAL MD</VERGIDAIRESI> 
      <VERGINO>47035582576</VERGINO> 
      <DEPOKODU>01</DEPOKODU> 
      <ODEMETIPI>6</ODEMETIPI> 
      <TOPLAMBRUT>1200.24</TOPLAMBRUT> 
      <TOPLAMISKONTO>60.01</TOPLAMISKONTO> 
      <TOPLAMKDV>205.24</TOPLAMKDV> 
      <TOPLAMNET>1345.47</TOPLAMNET> 
      <SATISTEMSILCISIKODU>001</SATISTEMSILCISIKODU> 
      <DAGITICIKODU></DAGITICIKODU> 
      <ARACKODU></ARACKODU> 
      <ARACPLAKA></ARACPLAKA> 
      <SEVKNO></SEVKNO> 
      <VADETARIHI>06.03.2013</VADETARIHI> 
      <KALEMLER> 
      <KALEM> 
       <KALEMNO>1</KALEMNO> 
       <URUNKODU>4009011024</URUNKODU> 
       <URUNADI>EFE KLASİK RAKI45º-100clx12AD TAVA(63,50 FİYATLI)</URUNADI> 
       <MIKTAR>24</MIKTAR> 
       <BIRIMFIYAT>50.01</BIRIMFIYAT> 
       <FIYAT>1200.24</FIYAT> 
       <BIRIM></BIRIM> 
       <KDV>18</KDV> 
       <ISKONTOLAR> 
        <ISKONTO> 
         <price>1200.24</price> 
         <KODU></KODU> 
         <ADI>Ürün İsk.1</ADI> 
         <TIPI></TIPI> 
         <ORAN>5</ORAN> 
         <TUTAR>60.012</TUTAR> 
        </ISKONTO> 
       </ISKONTOLAR> 
      </KALEM> 
      </KALEMLER> 
     </FIS> 
     <FIS> 
      <FISTIPI>SATIS</FISTIPI> 
      <FISID>29199773107</FISID> 
      <FISNO>a67511</FISNO> 
      <IPTAL>0</IPTAL> 
      <TARIH>13.02.2013</TARIH> 
      <MUSKODU>100242</MUSKODU> 
      <MUSADI>NUMBER ONE APART OTEL RESTAURANT</MUSADI> 
      <VERGIDAIRESI>KARABURUN</VERGIDAIRESI> 
      <VERGINO>50545253560</VERGINO> 
      <DEPOKODU>01</DEPOKODU> 
      <ODEMETIPI>6</ODEMETIPI> 
      <TOPLAMBRUT>2634.24</TOPLAMBRUT> 
      <TOPLAMISKONTO>195.21</TOPLAMISKONTO> 
      <TOPLAMKDV>439.03</TOPLAMKDV> 
      <TOPLAMNET>2878.06</TOPLAMNET> 
      <SATISTEMSILCISIKODU>001</SATISTEMSILCISIKODU> 
      <DAGITICIKODU></DAGITICIKODU> 
      <ARACKODU></ARACKODU> 
      <ARACPLAKA></ARACPLAKA> 
      <SEVKNO></SEVKNO> 
      <VADETARIHI>06.03.2013</VADETARIHI> 
      <KALEMLER> 
      <KALEM> 
       <KALEMNO>1</KALEMNO> 
       <URUNKODU>4001017212</URUNKODU> 
       <URUNADI>EFE YAŞ ÜZÜM RAKISI (45º) - 70 cl 12LI KOLİ</URUNADI> 
       <MIKTAR>12</MIKTAR> 
       <BIRIMFIYAT>47.03</BIRIMFIYAT> 
       <FIYAT>564.36</FIYAT> 
       <BIRIM></BIRIM> 
       <KDV>18</KDV> 
       <ISKONTOLAR> 
        <ISKONTO> 
         <price>564.36</price> 
         <KODU></KODU> 
         <ADI>Ürün İsk.1</ADI> 
         <TIPI></TIPI> 
         <ORAN>10</ORAN> 
         <TUTAR>56.436</TUTAR> 
        </ISKONTO> 
       </ISKONTOLAR> 
      </KALEM> 
      <KALEM> 
       <KALEMNO>2</KALEMNO> 
       <URUNKODU>4001</URUNKODU> 
       <URUNADI>EFE YAŞ ÜZÜM RAKISI (45º) - 20 cl 24 LU KOLİ</URUNADI> 
       <MIKTAR>24</MIKTAR> 
       <BIRIMFIYAT>16.07</BIRIMFIYAT> 
       <FIYAT>385.68</FIYAT> 
       <BIRIM></BIRIM> 
       <KDV>18</KDV> 
       <ISKONTOLAR> 
        <ISKONTO> 
         <price>385.68</price> 
         <KODU></KODU> 
         <ADI>Ürün İsk.1</ADI> 
         <TIPI></TIPI> 
         <ORAN>10</ORAN> 
         <TUTAR>38.568</TUTAR> 
        </ISKONTO> 
       </ISKONTOLAR> 
      </KALEM> 
      <KALEM> 
       <KALEMNO>3</KALEMNO> 
       <URUNKODU>4001013724</URUNKODU> 
       <URUNADI>EFE YAŞ ÜZÜM RAKISI (45º) - 35 cl 24 LU KOLİ</URUNADI> 
       <MIKTAR>24</MIKTAR> 
       <BIRIMFIYAT>26.66</BIRIMFIYAT> 
       <FIYAT>639.84</FIYAT> 
       <BIRIM></BIRIM> 
       <KDV>18</KDV> 
       <ISKONTOLAR> 
        <ISKONTO> 
         <price>639.84</price> 
         <KODU></KODU> 
         <ADI>Ürün İsk.1</ADI> 
         <TIPI></TIPI> 
         <ORAN>10</ORAN> 
         <TUTAR>63.984</TUTAR> 
        </ISKONTO> 
       </ISKONTOLAR> 
      </KALEM> 
      <KALEM> 
       <KALEMNO>4</KALEMNO> 
       <URUNKODU>4001011013</URUNKODU> 
       <URUNADI>EFE YAŞ ÜZÜM RAKISI (45º) - 100 cl 12LI TAVA</URUNADI> 
       <MIKTAR>6</MIKTAR> 
       <BIRIMFIYAT>60.37</BIRIMFIYAT> 
       <FIYAT>362.22</FIYAT> 
       <BIRIM></BIRIM> 
       <KDV>18</KDV> 
       <ISKONTOLAR> 
        <ISKONTO> 
         <price>362.22</price> 
         <KODU></KODU> 
         <ADI>Ürün İsk.1</ADI> 
         <TIPI></TIPI> 
         <ORAN>10</ORAN> 
         <TUTAR>36.222</TUTAR> 
        </ISKONTO> 
       </ISKONTOLAR> 
      </KALEM> 
      <KALEM> 
       <KALEMNO>5</KALEMNO> 
       <URUNKODU>4010017001</URUNKODU> 
       <URUNADI>EFE 5 YILLIK RAKI45º-70clx3AD KOLİ</URUNADI> 
       <MIKTAR>6</MIKTAR> 
       <BIRIMFIYAT>113.69</BIRIMFIYAT> 
       <FIYAT>682.14</FIYAT> 
       <BIRIM></BIRIM> 
       <KDV>18</KDV> 
      </KALEM> 
      </KALEMLER> 
     </FIS> 
    </FISLER> 
+0

Не похож результирующий набор у вас есть какая-либо отношение к XML или запросу. В XML-формате нет значения '98295', и в выводе запроса нет столбца' custid'. –

+0

Да, я просто совпадал с Custid, который является на txt-файле. 98295 происходит из другой таблицы (SELECT LNGNO FROM ARTUT13.DBO.TBLFATURA WHERE TXTOZELKOD = (c6.value ('(// FISLER/FIS/FISID) [1]', 'VARCHAR (100)'))), thnx – user2078011

+0

Мое предположение об этом будет заключаться в том, что ваша проблема заключается в том, что вы используете 'c6.value ('(// FISLER/FIS/FISID) [1]', 'VARCHAR (100)')', потому что всегда будет найден первый 'FISID 'в XML. Попробуйте это вместо этого. 'C6.value ('(../../ FISID) [1]', 'VARCHAR (100)')'. –

ответ

0

1) Ваш вопрос не ясен: как можно извлечь из этого CUSTID XML? В этом XML-элементе отсутствует элемент CUSTID.

2) Очень вероятно, причина (если я смотрю на исходный код) использование абсолютных ссылок (.value('(//element...)[1]',...)) вместо относительных ссылок (.value('(element...)[1]',...)).

Пример:

DECLARE @x XML; 
SET @x = N'<...>'; 
SELECT c6.value('(//FISLER/FIS/FISID)[1]','VARCHAR(100)') AS AbsoluteRef_FISID 
FROM @x.nodes('FISLER/FIS/KALEMLER/KALEM') T6(c6) 

SELECT c6.value('(FISID)[1]','VARCHAR(100)') AS RelativeRef_FISID 
FROM @x.nodes('FISLER/FIS') T6(c6) 

Результаты:

AbsoluteRef_FISID 
------------------- 
29199752211 
29199752211 
29199752211 
29199752211 
29199752211 
29199752211 

RelativeRef_FISID 
------------------- 
29199752211 
29199773107 

// означает абсолютные ссылки и c6.value('(//FISLER/FIS/FISID)[1]','VARCHAR(100)') извлечет только первый ([1]) FISID значение из этого XML.

.value('(FISID)[1]',...) использует относительную ссылку (по отношению к nodes('FISLER/FIS') T6(c6)), и результат будет содержит всеFISID значения. Если ваш выполнить этот запрос

SELECT c6.query('.') AS XmlNode 
FROM @x.nodes('FISLER/FIS') T6(c6); 

вы получите две строки, означающую, что .nodes('FISLER/FIS') извлечет два ряда

XmlNode 
---------------------------------------------------------------------------- 
<FIS><FISTIPI>SATIS</FISTIPI><FISID>29199752211</FISID><FISNO>a67502</FISNO> 
<FIS><FISTIPI>SATIS</FISTIPI><FISID>29199773107</FISID><FISNO>a67511</FISNO> 

из @x XML переменных. Начиная с этой точки (две строки), метод значения .value('(FISID)[1]',...) будет извлекать первые FISID ((FISID)[1]) для каждой строки. Таким образом, вы получите два значения FISID.

SQLFiddle demo

+0

Примечание: вы можете использовать относительный ref. таким образом: 'SELECT c6.value ('(../../ FISID) [1]', 'VARCHAR (100)') AS RelativeRef_FISID FROM @ x.nodes ('FISLER/FIS/KALEMLER/KALEM') T6 (с6); ' –

Смежные вопросы