Экспортируйте SQL в XML используя bcp с условием where - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь экспортировать данные в XML с этим кодом, он обычно работает нормально:

declare @cmd nvarchar(255);
select @cmd = 'bcp "SELECT * from [db].[dbo].[TW_StockReport](0,25,26,4,29,30,19,31) row For XML auto, XMLSCHEMA, root(''node'')" ' +
    'queryout "D:\Temp\dbstockandsalereport.xml" -S -T -w -r -t';

exec xp_cmdshell @cmd;

, но когда я пытаюсь добавить условие WHERE, он больше не работает:

declare @cmd1 nvarchar(1155);

select @cmd1 = 'bcp "SELECT INVENTLOCATIONID, AgeOfItem AS ''ProductYear'', ISNULL(SUM(Qty), 0) AS ''Unit'', COUNT(c.ItemID) AS ''ProductType''
FROM [db].[dbo].[TW_ItemsNonMovement] c 
LEFT JOIN [db].[dbo].[TempInventTable] d ON c.ITEMID = d.ITEMID collate Thai_CI_AS
WHERE d.TW_DEPARTMENTID = ''PMMan'' AND DateDiff <= 120 AND Qty > 0 
GROUP BY INVENTLOCATIONID, AgeOfItem ORDER BY INVENTLOCATIONID, AgeOfItem row FOR XML AUTO, XMLSCHEMA, ROOT(''node'') ;"' + 
'queryout "D:\Temp\PMMan-120.xml" -S -T -w -r -t';

exec xp_cmdshell @cmd1;

1 Ответ

0 голосов
/ 14 апреля 2020

Лучше создать хранимую процедуру (SP) и поместить туда весь оператор SELECT. После этого просто вызовите эту хранимую процедуру в bcp.

Дополнительно. таким образом вы всегда можете протестировать SP самостоятельно и убедиться, что он делает то, что от него ожидается.

Таким образом, это будет выглядеть следующим образом:

bcp "EXEC yourStoredProcedure;" ...
...