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,我们得到了我们一直在寻找的文件。
我们正在使用 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,我们得到了我们一直在寻找的文件。