2017-05-18 8 views
1

XML을 처음 사용하고 고객 테이블을 사용하여 SQL Server 2008에서 다음을 해결하려고합니다.너비 제한이있는 XML 요소 값

NAME 열의 너비는 고정되어 있으므로 값 (고객 이름)은 둘 이상의 표현으로 분리되어야합니다.

참조하십시오

  • NAME index="1"을 ....
  • NAME index="2"을 ....이 문제를 해결하는 방법을

어떤 생각을?

는 앤

<PARTNER> 
    <NAME index="1">XEXSY SMALL REALTY LLC</NAME> 
    <NAME index="2">AA/NAX TEEEENERGY</NAME> 
    <PARTNRTYPE>703884</PARTNRTYPE> 
    <ADDRESS> 
     <ADDRLINE index="1">544 PACIFIC BLVD</ADDRLINE> 
     <CITY>LONG BEACH</CITY> 
     <COUNTRY>US</COUNTRY> 
     <POSTALCODE>07740</POSTALCODE> 
    </ADDRESS> 
</PARTNER> 

답변

0

당신을이 디자인은 awfull 감사합니다. 당신이 이것을 변경하려면 조금 기회에 할 수 있으면이 함께 붙어있는 경우에, 당신은 ...

, 당신은 이런 식으로 시도 할 수 있어야합니다

DECLARE @mockup TABLE(Name VARCHAR(100),PartnerType INT,Addr VARCHAR(100),City VARCHAR(100)); 
INSERT INTO @mockup VALUES 
('This is a very long name which needs to be splitted in smaller parts' 
    ,12345 
    ,'And this address is very long too, the person has a really long address...' 
    ,'Washington') 
,('ShortName' 
    ,12345 
    ,'ShortAddress' 
    ,'New York'); 

이에게 알려줄의 길이를 설정할 수 있습니다 조각. TOP(20)은 하드 코드되어 있으며 부품 수에 대한 상한을 설정합니다.를 온 - 더 - 플라이하고 당신이 필요로하는 중첩을 가진 XML을 생성 FOR XML PATH()를 사용

DECLARE @PartLenght INT=20; 

--The 쿼리는 다수의 테이블 (집계 테이블) 을 얻을 것이다.

WITH Tally AS 
(
    SELECT TOP(20) ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Nr 
    FROM master..spt_values 
) 
SELECT (
     SELECT Nr AS [NAME/@index] 
       ,SUBSTRING(m.Name,Nr+((Nr-1) * (@PartLenght-1)),@PartLenght) AS [NAME] 
     FROM Tally 
     WHERE LEN(SUBSTRING(m.Name,Nr+((Nr-1) * (@PartLenght-1)),@PartLenght))>0 
     FOR XML PATH(''),TYPE 
     ) 
     ,m.PartnerType AS [PARTNERTYPE] 
     ,(
      SELECT  
      (
      SELECT Nr AS [ADDRLINE/@index] 
        ,SUBSTRING(m.Addr,Nr+((Nr-1) * (@PartLenght-1)),@PartLenght) AS [ADDRLINE] 
      FROM Tally 
      WHERE LEN(SUBSTRING(m.Addr,Nr+((Nr-1) * (@PartLenght-1)),@PartLenght))>0 
      FOR XML PATH(''),TYPE 
     ) 
     ,City AS [CITY] 
     FOR XML PATH('ADDRESS'),TYPE 
    ) 
FROM @mockup AS m 
FOR XML PATH('PARTNER') 

<PARTNER> 
    <NAME index="1">This is a very long </NAME> 
    <NAME index="2">name which needs to </NAME> 
    <NAME index="3">be splitted in small</NAME> 
    <NAME index="4">er parts</NAME> 
    <PARTNERTYPE>12345</PARTNERTYPE> 
    <ADDRESS> 
    <ADDRLINE index="1">And this address is </ADDRLINE> 
    <ADDRLINE index="2">very long too, the p</ADDRLINE> 
    <ADDRLINE index="3">erson has a really l</ADDRLINE> 
    <ADDRLINE index="4">ong address...</ADDRLINE> 
    <CITY>Washington</CITY> 
    </ADDRESS> 
</PARTNER> 
<PARTNER> 
    <NAME index="1">ShortName</NAME> 
    <PARTNERTYPE>12345</PARTNERTYPE> 
    <ADDRESS> 
    <ADDRLINE index="1">ShortAddress</ADDRLINE> 
    <CITY>New York</CITY> 
    </ADDRESS> 
</PARTNER> 
+0

당신에게 너무 많은 Shnugo 감사 결과,이 매우 우아한 코드는 내 일을 저장! –

+0

님이 당신의 조언을 따랐습니다. 이것은 적절한 에티켓입니다. –