如何通过存储过程将 API 响应传递给 Azure SQL Table

How to Pass API Response to Azure SQL Table via Stored Procedure

我有一个 Azure 数据工厂管道,可以将数据上传到 Salesforce,然后将响应返回给 Azure 数据工厂。我正在尝试从失败的作业中获取响应并将其存储在 Azure SQL 中的失败记录 table 中。我正在使用存储过程 activity 将值传递给 table。我遇到的问题是存储过程 activity 正在获取正确的响应输入,但是当它将值传递给 SQL 时,它只是插入 ".

我之前将 failed_records_details 列设置为 Varchar(max) 然后尝试将其更改为 NText 并查看 SQL 是否会接受从 API 回复。但到目前为止我还没有任何运气。任何帮助将不胜感激。

更新
OP 将他的 table 结构更改为 varchar(max) 并且有效。


经过多次测试,我找到了答案。我使用OPENJSON在存储过程中处理。

  1. 这是我的 table:
CREATE TABLE [dbo].[product](
    [PRODUCT_ID] [int] NULL,
    [PRODUCT_TYPE] [int] NULL,
    [PRODUCT_NAME] [varchar](50) NULL,
    [PRODUCT_TITLE] [varchar](255) NULL,
    [PRODUCT_PIC] [varchar](255) NULL,
    [CREATE_TIME] [datetime] NULL,
    [UPDATE_TIME] [datetime] NULL,
    [PRODUCT_INTRO] [text] NULL,
    [PRODUCT_FEATURE_ID] [varchar](255) NULL,
    [PRODUCT_PARAM] [varchar](255) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
  1. 这是我的 API 回复:
{
    "productId": 2,
    "productTypeId": 2,
    "productName": "AD2",
    "productTitle": "TopAir AD215-1000A",
    "productPic": "/img/productPic/1593684705859user.jpg",
    "createTime": "2020-06-05 09:17:31",
    "updateTime": "2020-06-05 09:17:31",
    "productFeatureId": "",
    "productParam": "/img/productPic/param/1593685548627a32415ca9a21f6f9a1d99b2731f224b5d319c424.jpg",
    "productIntro": "",
    "productType": null,
...
  1. 这是我的存储过程,api请求作为字符串类型的输入参数。
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[uspProduct] @product NVARCHAR(MAX)
AS  

BEGIN TRY 
        INSERT INTO dbo.product(PRODUCT_ID,PRODUCT_TYPE,PRODUCT_NAME,PRODUCT_TITLE,PRODUCT_PIC,CREATE_TIME,UPDATE_TIME,PRODUCT_INTRO,PRODUCT_FEATURE_ID,PRODUCT_PARAM)
                SELECT * FROM OPENJSON(@product)
                    WITH(
                        PRODUCT_ID int '$.productId',
                        PRODUCT_TYPE int '$.productTypeId',
                        PRODUCT_NAME varchar(50) '$.productName',
                        PRODUCT_TITLE varchar(255) '$.productTitle',
                        PRODUCT_PIC varchar(255) '$.productPic',
                        CREATE_TIME datetime '$.createTime',
                        UPDATE_TIME datetime '$.updateTime',
                        PRODUCT_INTRO varchar(255) '$.productIntro',
                        PRODUCT_FEATURE_ID varchar(255) '$.productFeatureId',
                        PRODUCT_PARAM varchar(255) '$.productParam'

                    )
END TRY  
BEGIN CATCH 
    PRINT ERROR_MESSAGE ( )   
END CATCH
;

  1. 添加动态内容@string(activity('Web1').output)。经过反复测试,这里必须将API响应从对象类型转换为字符串类型。

  2. 这是存储过程1的输入activity。

  3. 调试结果如下:

我可以看到 API 响应已插入 table。