2016-10-18 29 views
1

以下、これまでに試したことを示しています。SQL Server:Whileループでカーソルを使用してXMLファイルをエクスポートする

カーソルを使用してSQL Server whileループがあります。

SELECT NAME 
FROM TRDR 
WHERE TRDR = MyCursor.TRDR 

私はカーソル@MyCursor

DECLARE @MyCursor CURSOR; 
DECLARE @MyField INT; 
DECLARE @FromDate DATE; 
DECLARE @ToDate DATE; 
DECLARE @Serie INT; 
DECLARE @Sosource INT; 
DECLARE @trdr INT; 

SET @FromDate = '20160901'; 
SET @ToDate = '20160930'; 
SET @Serie = 4700; 
SET @Sosource = 1416; 
SET @trdr = 2835; 

BEGIN 
    SET @MyCursor = CURSOR FOR 
     SELECT TOP 1000 FINDOC, TRDR 
     FROM FINDOC 
     WHERE SOSOURCE = @Sosource 
      AND TRNDATE >= @FromDate 
      AND TRNDATE <= @ToDate 
      AND SERIES = @Serie 
      AND TRDR = 2835 
END 

OPEN @MyCursor 

FETCH NEXT FROM @MyCursor INTO @MyField 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    SELECT NAME 
    FROM TRDR 
    WHERE TRDR = MyCursor.TRDR 
    FOR XML PATH('GrpHdr'), ROOT ('CstmrCdtTrfInitn') 

    FETCH NEXT FROM @MyCursor INTO @MyField 
END; 

CLOSE @MyCursor ; 
DEALLOCATE @MyCursor; 

それは以下のようにあるべき予想される出力の値をとる方法について確認していない:私のクエリでの問題は、以下のコードでの行にあります:

<CstmrCdtTrfInitn> 
    <GrpHdr> 
     <name>Chris</name> 
    </GrpHdr> 
    <GrpHdr> 
     <name>Martin</name> 
    </GrpHdr> 
    <GrpHdr> 
     <name>John</name> 
    </GrpHdr> 
    <GrpHdr> 
     <name>George</name> 
    </GrpHdr> 
    <GrpHdr> 
     <name>Michael</name> 
    </GrpHdr> 
</CstmrCdtTrfInitn> 

答えて

0

あなたが本当に結果を望むものに更新します。これを試して、これが機能するかどうか確認してください。

Select TOP 1000 T.Name 
      FROM FINDOC F 
      JOIN TRDR T ON F.TRDR = T.TRDR 
      WHERE F.SOSOURCE = @Sosource 
       AND F.TRNDATE >= @FromDate 
       AND F.TRNDATE <= @ToDate 
       AND F.SERIES = @Serie 
       AND F.TRDR = 2835 
     FOR XML PATH('GrpHdr'), ROOT ('CstmrCdtTrfInitn') 
+0

ありがとうございました。それは私の問題を解決しますが、多くのXMLファイルが作成されます。 XMLファイルを1つだけ作成することは可能ですか? – user2242558

+0

入力したデータと予想される結果の両方を表示できますか? –

+0

私の質問に予想される出力を追加しました – user2242558

関連する問題