本机SQL Server JSON使用失败

5lhxktic  于 2022-11-21  发布在  SQL Server
关注(0)|答案(1)|浏览(173)

我正在尝试使用一个JSON API并将其放入SQL Server(版本15.x)中的一个表中。我可以手动运行它,它很好地与我的进程沿着运行并很好地放置在一起。
我需要将其自动化以使用API来满足存档需要,但当我将其放入SQL Server代理作业步骤并尝试运行它时,该操作失败,并显示以下消息:
JSON文本的格式不正确。在位置16处发现意外字符“"。[SQLSTATE 42000](错误13609)。该步骤失败。
所以,当在线查看时,该错误消息表明JSON本身存在格式错误,我无法控制。我对JSON不是很了解,因此不知道如何修复错误。
我的SQL有问题吗?将它作为作业中的一个步骤调用,而不是存储为过程然后调用该过程,这样合适吗?这有关系吗?下面的语句是针对公共API运行的,所以请测试它,并让我知道我做错了什么!谢谢

Declare @Object as Int;
DECLARE @hr  int
Declare @json as table(Json_Table nvarchar(max))

Exec @hr=sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @Object OUT;
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
Exec @hr=sp_OAMethod @Object, 'open', NULL, 'get',
               'https://seeclickfix.com/open311/v2/407/requests.json',
                 'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
Exec @hr=sp_OAMethod @Object, 'send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object
Exec @hr=sp_OAMethod @Object, 'responseText', @json OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @Object

INSERT into @json (Json_Table) exec sp_OAGetProperty @Object, 'responseText'
-- select the JSON string
select * from @json 
-- Parse the JSON string
insert into [DATA].[DATA].[SeeClickFix_APIFeed_refresh](
    [description]
    ,[address]
    ,[lat]
    ,[service_request_id] 
    ,[requested_datetime] 
    ,[long]
    ,[service code] 
    ,[status] 
    ,[zipcode] 
    ,[agency_responsible] 
    ,[service_name] 
    ,[media_url] 
    ,[expected_datetime] 
    ,[address_id]
    ,[service_notice] 
    ,[status_notes]
 ) 
SELECT *  FROM OPENJSON((select * from @json))
WITH (   
     [description] nvarchar(max) "$.description"   ,
        [address]   nvarchar(max) "$.address",
        [lat]   nvarchar(max) "$.lat",
        [service_request_id]   nvarchar(max) "$.service_request_id",
        [requested_datetime]   [nvarchar](max) "$.requested_datetime",
        [long]   nvarchar(max) "$.long",    
        [service code]   nvarchar(max) "$.service_code",
        [status]   nvarchar(max) "$.status",
        [zipcode]   nvarchar(max) "$.zipcode",
        [agency_responsible]   nvarchar(max) "$.agency_responsible",
        [service_name]   nvarchar(max) "$.service_name",     
        [media_url]  [nvarchar](max) "$.media_url",
        [expected_datetime]   [nvarchar](max) "$.expected_datetime",
        [address_id]   nvarchar(max) "$.address_id",
        [service_notice]   nvarchar(max) "$.service_notice",
        [status_notes]   nvarchar(max) "$.status_notes"     

)
EXEC sp_OADestroy @Object

我对JSON了解不多,所以不确定我可以修改什么来尝试修复它

jvlzgdj9

jvlzgdj91#

得到了一个修复,在它的当前状态。一些评论家指出,这是一个MS问题,而不是一个JSON错误。
将“SET TEXTSIZE -1”添加到头中允许它在SQL Server代理中运行。这可能与SSMS之外的服务器本身上的默认文本大小有关。仍然不完全了解它是什么,并且@alwaysLearning我需要了解更多关于您的评论的信息。

相关问题