【问题标题】:Azure Data Factory - Null parameter in Stored Procedure activityAzure 数据工厂 - 存储过程活动中的 Null 参数
【发布时间】:2022-10-24 00:50:01
【问题描述】:

我的 Azure 数据工厂管道中有一个存储过程活动,它在 Azure Synapse 上调用以下存储过程:

CREATE PROCEDURE schema.procedure_name @portafoglio INT [...]

为了使用先前在管道中设置的变量(portafoglioElab)而配置的活动:

我的问题是如何通过存储过程活动中的 Azure 数据工厂管道将 Null 值作为输入参数传递给过程。 我尝试将变量 portafoglioElab 设置为 null、“null”、None、@coalesce(null),但我没有找到对应于 sql NULL 的正确值。

这是我设置变量的管道步骤:

这是整个管道的 IF 条件中的一个步骤:

确实我收到了这个错误:

无法创建 Sql 源。请仔细检查连接字符串,存储过程设置为正确格式。错误:属性“Value”的值对于存储过程参数“portafoglio”无效。

可以请人帮助我吗? 提前致谢

【问题讨论】:

  • “存储过程允许 sql Null 值”你这是什么意思?存储过程参数不能定义为NOT NULL,除非您使用本机编译的过程。因此(通常)全部存储过程参数可以允许,因为它们无法配置不去。你实际上表示程序的参数默认值NULL?这不一样允许NULL。还是您实际上使用的是本机编译的过程?
  • 您可以在尝试将NULL 添加为参数值的地方添加管道的屏幕截图吗?
  • @Larnu,我的错,我在我的问题中添加了一些信息。问题是当我尝试通过 Azure 数据工厂管道中的变量将空值作为输入参数传递给存储过程时收到错误
  • 如果参数有默认NULL 的值,如果你希望它是 NULL,为什么不直接省略它?
  • @Larnu 因为是存储过程的输入参数,所以可以为 Null,也可以在 Pipeline 执行过程中设置。如果您不通过它,您将收到此错误:Sql 错误号:201。错误消息:过程或函数“NAME_OF_PROCEDURE”需要参数“@portafoglio”,但未提供该参数。

标签: sql-server azure stored-procedures azure-data-factory azure-data-factory-2


【解决方案1】:

我找到了动态内容的解决方案。

不仅可以将动态内容放入参数的值中,甚至参数本身也可以是动态的。

经过多次测试,我解决了这个值:

@json(concat('{"portafoglio": {"value": ', variables('portafoglioElab'), '}}'))

通过这种方式,我可以处理 null 而不是 null 值。 注意文档是错误的,内容必须是字典,而不是字符串。

【讨论】:

    【解决方案2】:

    通过 -1 或其他一些哨兵并在 proc 中处理它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多