2017-02-06 11 views
0

최근 웹에서 백엔드로 SQL Server를 사용하여 SAP 인벤토리 정보를 동기화하는 전 동료가 프로젝트를 할당 받았습니다. 여기에는 XML 파일 생성과 관련된 부분이 있는데 여기에 내 딜레마가 놓여 있습니다. I가 수행해야하는 XML 구조에서는 nvarchar 키와 함께 ROW_NUMBER 사용

각 재고 항목 다소 같이, 숫자 ID와 Message 요소에 포함되어

<Messages> 
    <Message> 
     <MessageID>1</MessageID> 
     <first item /> 
    </Message> 
    <Message> 
     <MessageID>2</MessageID> 
     <second item /> 
    </Message> 
</Messages> 

MessageID 필드는 행 번호 역할 : 그것은에서 증분 1을 결과 집합의 행 수로 나눕니다.

SELECT 
    ROW_NUMBER() OVER(ORDER BY items.ItemCode) MessageID, 
    items.ItemCode as SKU 
FROM OITM items 
FOR XML PATH('Message'), ROOT('Messages') 

오류 숫자

주조에 데이터 유형 VARCHAR 변환 실패 : 문제는 테이블의 기본 키는 nvarchar하지만 ROW_NUMBER() OVER(ORDER BY)bigint 키가 필요하므로 다음 코드이며, 키에 거의 모든 행에 숫자가 아닌 문자가 포함되어 있기 때문에 ItemCode ~ bigint을 사용할 수 없습니다. 테이블에 다른 키 필드가없고 수동으로 추가하는 것이 불가능합니다.

  1. 테이블에 5500 개 이상의 행이 있습니다.
  2. SAP는 SQL 백엔드에서 UPDATE의 테이블을 지원하지 않으며 불일치가 발견되면 데이터베이스를 잠급니다.

XML 구조를 변경할 수 없습니다. 상대방의 API가 XML 구조를 허용하지 않기 때문입니다.

제 질문은 ROW_NUMBER()nvarchar 키를 사용하는 방법이 있습니까? 또는 숫자가 아닌 키와 함께 작동하는 ROW_NUMBER()의 대안은 무엇입니까?

+0

방금 ​​귀하의 코드를 시도했으며 필요한 XML을 생성하는 데 문제가 없으며 오류 메시지를 표시합니다. 샘플 데이터를 추가하면 도움이 될 것입니다. –

+2

사용자가 질문에서 오류가 발생했기 때문에이 질문을 주제와 다르게 끝내기로 동의합니다. 그들의 대답을보십시오. –

답변

0

캐스트 문자열로 row_number()은 :

SELECT CAST(ROW_NUMBER() OVER (ORDER BY items.ItemCode) as VARCHAR(255)) as MessageID, 
     items.ItemCode as SKU 
FROM OITM items 
FOR XML PATH('Message'), ROOT('Messages'); 
1

... 디부 오, 그 오류는 완전히 다른 라인으로 제공되고 있었다. 나는 눈이 멀었을뿐만 아니라 바보 같았다.

에 대한 질문이 있으니 부담없이으로 문의하십시오.

+0

한동안 우리 모두에게 일어났습니다 :-) –