SQL Server - утилита BCP не экспортирует несколько файлов - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь экспортировать некоторые данные в файлы XML в определенном месте, из SQL, используя утилиту BCP.Информация в моей хранимой процедуре, которая генерирует XML, выбирается через представление, которое возвращает следующую информацию:

          GUID                          IDHeader    IDLines
-------------------------------------------------------------
A5AF1E8B-C743-4B26-979E-9B83B0037253    GEA-00008   GEA-00008
A5AF1E8B-C743-4B26-979E-9B83B0037253    GEA-00008   GEA-00008
AA4919C5-8050-4DD3-A463-F04BC0AE3F72    GEA-00011   GEA-00011
AA4919C5-8050-4DD3-A463-F04BC0AE3F72    GEA-00011   GEA-00011
5F4E196C-A360-48B7-8127-3364C7268706    GEA-00012   GEA-00012
5F4E196C-A360-48B7-8127-3364C7268706    GEA-00012   GEA-00012
F0CD1949-F8E0-4A74-B273-E9F285B844DB    GEA-00013   GEA-00013
F0CD1949-F8E0-4A74-B273-E9F285B844DB    GEA-00013   GEA-00013

На основании приведенной выше информации у меня должно быть создано 4 XML файлов, нопочему-то генерируется только 1 файл, и я не понимаю, почему.

Часть моего кода выглядит так:

BEGIN
    DECLARE @XMLFinal varchar(MAX) = '';
    DECLARE @nr nvarchar(100);
    DECLARE @XML varchar(MAX);


    DECLARE Records CURSOR FAST_FORWARD FOR
        SELECT DISTINCT
               GUID
        FROM MyView;

    OPEN Records;
    FETCH NEXT FROM Records
    INTO @nr;
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @XML = '';
        SET @XML = (SELECT TOP 1
                           IDHeader,
                           IDLines
                    FROM MyView
                    WHERE GUID = @nr
                   FOR XML PATH(''));


        FETCH NEXT FROM Records
        INTO @nr;

        SET @XMLFinal = @XMLFinal + @XML;
    END;

    CLOSE Records;
    DEALLOCATE Records;


    IF @XMLFinal IS NOT NULL
   AND NOT @XMLFinal LIKE '%ORD%'
    BEGIN

        INSERT INTO ExportOrder (XML,
                                 Sent)
        SELECT @XMLFinal,
               '0';

        DECLARE @XMLExport varchar(MAX);
        DECLARE @Name varchar(MAX);
        DECLARE @ID nvarchar(MAX);

        SET @ID = (SELECT TOP 1 IDHeader FROM MyView WHERE GUID = @nr);

        SET @Name = 'Order-' + @ID + '_' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.xml';

        SET @XMLExport = @XML;


        IF OBJECT_ID('tempdb..##x') IS NOT NULL
            DROP TABLE ##x;

        SELECT @XMLExport AS x
        INTO ##x;

        DECLARE @cmd nvarchar(4000);
        DECLARE @pathAndFileName nvarchar(MAX);
        DECLARE @result int;
        SET @pathAndFileName = N'C:\MyFolder\' + @Name;
        SET @cmd = N'C:\Binn\bcp.exe "SELECT  * from ##x" queryout "' + @pathAndFileName + N'" -c -T -t; ';
        EXEC @result = xp_cmdshell @cmd;
    END;
END;

Что я здесь не так делаю?Что я должен сделать, чтобы сгенерировать все 4 файла?Спасибо

...