Power Automate同步SQL Server时替代诊所结束日期默认1900-01-01排查
问题:替代诊所结束日期同步至SQL Server时被设为默认值1900-01-01
场景概述
我搭建了一套自动化流程:通过MS Forms收集医师提交的主诊所及替代诊所结束日期,再通过Power Automate将数据同步到SQL Server。目前主诊所的结束日期更新完全正常,但所有替代诊所的结束日期始终被插入SQL默认值1900-01-01,而非表单中选择的日期。
流程步骤
- 医师提交MS Forms表单,填写主诊所+最多3个替代诊所的结束日期
- Power Automate捕获表单提交事件,提取数据后调用SQL Server存储过程
- 执行存储过程
UpdatePhysicianClinicInfo更新mh_clinics_physicians表中的结束日期字段
环境
- SQL Server
- 使用Azure Data Studio管理数据库
已尝试的解决动作
- 直接执行SQL UPDATE语句插入替代诊所日期:正常生效
- 在Power Automate中对日期字段进行格式化(转为
yyyy-MM-dd格式):无效 - 在存储过程内添加参数非空校验逻辑:无效
- 手动调用存储过程传入替代诊所日期参数:可正常更新目标字段,但自动化流程调用时失效
存储过程核心代码片段
WHILE @i <= 3 BEGIN SET @EndDate = CASE WHEN @i = 0 THEN @EndDateForCurrentPrimaryClinic WHEN @i = 1 THEN @EndDateForCurrentAlternateClinic1 WHEN @i = 2 THEN @EndDateForCurrentAlternateClinic2 WHEN @i = 3 THEN @EndDateForCurrentAlternateClinic3 END; SET @ClinicName = CASE WHEN @i = 0 THEN @CurrentPrimaryClinicName WHEN @i = 1 THEN @CurrentAlternateClinicName1 WHEN @i = 2 THEN @CurrentAlternateClinicName2 WHEN @i = 3 THEN @CurrentAlternateClinicName3 END; SET @PortionOfPractice = CASE WHEN @i = 0 THEN 'Primary' ELSE 'Alternate' END; IF @ClinicName IS NOT NULL BEGIN SELECT @ClinicID = clinic_id FROM mh_clinics WHERE clinic_name = @ClinicName; END IF @EndDate IS NOT NULL BEGIN UPDATE mh_clinics_physicians SET date_left_clinic = @EndDate, date_modified = GETDATE(), modified_by = @ModifiedBy WHERE physician_id = @PhysicianID AND clinic_id = @ClinicID AND portion_of_practice = @PortionOfPractice; END SET @i = @i + 1; END
目标表mh_clinics_physicians示例数据
| clinics_physicians_ID | physician_id | physician_name | clinic_id | clinic_name | portion_of_practice | date_active_in_clinic | date_left_clinic |
|---|---|---|---|---|---|---|---|
| 304 | 254 | John Doe | 3 | Clinic A | Primary | 2023-11-03 | 2023-11-18 |
| 305 | 254 | John Doe | 4 | Clinic B | Alternate | 2023-11-03 | 1900-01-01 |
| 306 | 254 | John Doe | 5 | Clinic C | Alternate | 2023-11-20 | 1900-01-01 |
排查方向
- 校验Power Automate参数传递:检查替代诊所日期参数在传递时是否存在值丢失或类型不匹配。比如表单未填写时是否传递空值,或者日期格式在传递中被转为非SQL兼容的字符串,导致存储过程无法识别,触发字段默认值。
- 检查存储过程参数定义:确认
@EndDateForCurrentAlternateClinic1/2/3的参数类型是否为DATE或DATETIME,同时核对Power Automate中传递的参数名与存储过程定义是否完全一致(大小写、拼写)。 - 验证ClinicID匹配逻辑:处理替代诊所时,检查
@ClinicName是否能在mh_clinics表中匹配到对应的clinic_id。如果clinic_id为NULL,UPDATE语句的WHERE条件不满足,若表中date_left_clinic字段存在默认值,可能会被误插入(需结合执行日志确认是否进入UPDATE分支)。 - 查看Power Automate运行日志:调取流程运行日志,确认传递给存储过程的替代诊所日期参数值是否正确,是否在传递过程中被篡改或丢失。
- 捕获SQL执行日志:启用SQL Server的执行日志,记录自动化流程调用存储过程时的实际参数值,与手动调用时的参数对比,定位差异点。
内容的提问来源于stack exchange,提问作者slickspidey
相关产品推荐
相关产品推荐

