SQL Server: цикл While с использованием курсора и экспортом XML-файла

#sql-server #database

#sql-сервер #База данных

Вопрос:

Ниже я показываю, что я пробовал до сих пор.

У меня есть while цикл SQL Server с использованием курсора. Проблема в моем запросе находится в строке с приведенным ниже кодом:

 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>
  

Ответ №1:

Обновите до того, что вы действительно хотите для результатов. Попробуйте это и посмотрите, работает ли это.

    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')
  

Комментарии:

1. Спасибо за ваш ответ. Это устраняет мою проблему, но создает много XML-файлов. Возможно ли создать только один XML-файл?

2. Можете ли вы показать свои данные, как входные, так и ожидаемые результаты?

3. Я добавил ожидаемый результат в свой вопрос

4. Обновите ответ на основе того, что вы хотите. Я не думаю, что для этого вам нужен курсор.