SQL 批量复制实用程序添加 Returns 到 JSON 个文件

SQL Bulk Copy Utility adding Carriage Returns to JSON files

我们正在使用 SQL bcp 调用将存储过程中的数据写入 JSON 文件。当我 运行 它并打开该文件时,会添加 CRLF,并将其分成几行。这会导致验证问题,如果您尝试使用 Notepad++ 或 JSON Buddy 进行格式化,它会引发解析错误。

set @cmd = 'bcp "exec [OurServer].[dbo].[sp_OurStoredProcedure]" queryout "'+@outputFile+'" -UTF8 -T'
exec master..xp_cmdshell @cmd

存储过程在 my SELECT 语句末尾使用 FOR JSON PATH 将我的结果解析为 JSON.

在 Notepad++ 中查看所有字符时,输出如下所示:

我们终于能够得到想要的输出。 我们一直在尝试将结果转换为 nvarchar(MAX),如下所示:

SELECT CAST(
            (SELECT ProductID 'ID', ProductCost 'Cost' 
             FROM products FOR JSON PATH, ROOT('feedProducts') 
            ) 
            AS NVARCHAR(MAX)) AS feedData

经过大量试验和错误后,我们直接加载到一个变量中,然后 return 从我们的存储过程中编辑该变量,如下所示:

DECLARE @txtResult NVARCHAR(MAX)
SET @txtResult = (
                  SELECT ProductID 'ID', ProductCost 'Cost' 
                  FROM products FOR JSON PATH, ROOT('feedProducts') 
                 )
SELECT @txtResult as feedData

当我们在下面调用我们的 bcp 实用程序时,第二个程序有效,而第一个无效。

bcp "exec [DatabaseName].[dbo].[sprocName]" queryout "'+@outputFile+'" -T -w

第一个过程切断了我们的数据,没有给我们完整的结果,而第二个过程给了我们完整的 return,我们得到了我们一直在寻找的文件。