ADF中utcNow()转DateTime传入存储过程报错问题排查
问题原因与解决办法
核心错误
你误用了convertFromUtc函数的参数规则:
- 该函数的第二个参数必须是时区标识字符串(比如
'China Standard Time'),但你传入了日期格式'yyyy-MM-dd hh:mm:ss',函数无法识别目标时区,直接触发参数格式错误。 - 另外报错信息里的
@uts.Now()应该是拼写失误,正确的函数是@utcNow(),这大概率是输入时的笔误。
正确处理方式
根据你的实际需求选择对应方案:
方案1:直接传递UTC时间给存储过程
你的管道参数ExecutionTime默认值为@utcNow(),本身就是标准的DateTime类型,无需任何转换,直接在存储过程活动的参数中引用@pipeline().parameters.ExecutionTime即可,ADF会自动适配存储过程的DateTime参数类型。
方案2:转换为指定时区的DateTime再传递
如果需要将UTC时间转换为其他时区的时间,使用convertFromUtc的正确语法:
@convertFromUtc(pipeline().parameters.ExecutionTime, 'China Standard Time')
将第二个参数替换为你需要的时区标识(比如'UTC'、'Eastern Standard Time'等),转换后的结果仍为DateTime类型,可直接传递给存储过程。
方案3:存储过程需要特定格式的字符串参数
如果存储过程实际接收的是字符串类型而非DateTime,使用formatDateTime函数转换格式:
@formatDateTime(pipeline().parameters.ExecutionTime, 'yyyy-MM-dd HH:mm:ss')
注意HH表示24小时制,hh表示12小时制,可根据需求调整。
内容的提问来源于stack exchange,提问作者WindSwept
相关产品推荐
相关产品推荐

