Я пытаюсь экспортировать некоторые данные в файлы 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 файла?Спасибо