Azure Data Factory存储过程活动未更新表数据排查请求
Azure Data Factory存储过程活动未更新表数据的排查与修复
核心原因
存储过程对输入参数的解析逻辑与ADF实际传入的参数结构完全不匹配:
- ADF存储过程活动中,
p_request_string参数的实际值就是你指定的JSON数组字符串:"[[{\"proclaim_id\":1,...}]]" - 但存储过程里错误地尝试从
$.source.storedProcedureParameters.p_request_string路径解析参数,这个路径在传入的参数值中根本不存在,导致@var1和@var2均为NULL,后续临时表无数据,最终更新操作无行匹配,自然没有数据变更。
验证方式
在SSMS中严格模拟ADF的参数传入方式执行测试:
EXEC [dbo].[UpdateProclaimIDs_test_adf2] @p_request_string = '[[{"proclaim_id":1,"test_patient_id":1},{"proclaim_id":2,"test_patient_id":2},{"proclaim_id":3,"test_patient_id":3},{"proclaim_id":4,"test_patient_id":4},{"proclaim_id":5,"test_patient_id":1},{"proclaim_id":6,"test_patient_id":2},{"proclaim_id":7,"test_patient_id":3},{"proclaim_id":8,"test_patient_id":4}]]'
此时会发现存储过程执行后无数据更新,和ADF中的现象一致——这说明你之前在SSMS测试时,可能误传入了包含source层级的完整JSON结构,而非和ADF完全相同的参数值。
修复方案
修改存储过程,直接使用传入的@p_request_string参数进行JSON解析,移除多余的层级解析逻辑:
ALTER PROCEDURE [dbo].[UpdateProclaimIDs_test_adf2] @p_request_string NVARCHAR(MAX) AS BEGIN -- 直接使用传入的参数解析JSON数组 SELECT value INTO #temp2 FROM OPENJSON(@p_request_string) CREATE TABLE #ProclaimIDs (testPatientID INT, proclaim_id INT) INSERT INTO #ProclaimIDs(testPatientID, proclaim_id) SELECT test_patient_id, proclaim_id FROM #temp2 CROSS APPLY OPENJSON(value) WITH (proclaim_id INT '$.proclaim_id', test_patient_id INT '$.test_patient_id') UPDATE pta SET proclaim_id = pis.proclaim_id FROM proclaim_test_adf2 pta JOIN #ProclaimIDs pis ON pis.testPatientID = pta.test_id END
额外建议
- 执行存储过程后,可通过
SELECT @@ROWCOUNT查看受影响的行数,快速验证更新是否生效; - 若需要在ADF中排查执行细节,可开启活动的日志记录,查看实际传入的参数和执行返回结果。
内容的提问来源于stack exchange,提问作者user2736893
相关产品推荐
相关产品推荐

