【问题标题】:How to get date String output from stored procedure in Azure Data Factory?如何从 Azure 数据工厂中的存储过程获取日期字符串输出?
【发布时间】:2021-08-03 16:40:25
【问题描述】:

我在 Azure SQL DB 中有一个存储过程,它根据输入日期字符串返回 2 个输出参数 startDateendDate

这是存储过程:

CREATE PROCEDURE dbo.SP_DEDUCE_START_DATE_END_DATE
    @inputDateTimeString NVARCHAR(MAX) NULL,
    @startDate NVARCHAR(MAX) NULL OUT,
    @endDate NVARCHAR(MAX) NULL OUT
AS
BEGIN
    -- exact logic omitted as to demonstrate the 2 outputs date string only
    SELECT 
        @inputDateTime AS inputDateTime, 
        @startDate AS startDate, @endDate AS endDate

    RETURN;
END
GO

我在寻找什么:完整的端到端解决方案:

  1. 从存储过程中获取两个输出日期字符串startDateendDate
  2. 将 2 个日期字符串存储到 2 个管道变量 START_DATEEND_DATE(因为我有其他处理逻辑来影响管道变量)
  3. 将 2 个管道变量作为参数提供给下游数据流

我尝试过/查看过的内容:

  1. 这个SO answer 中的link - 很接近,但不是一个完整的答案,因为语法似乎不完整
  2. link 提到存储过程活动不能用于访问 SP 输出;将需要查找活动

【问题讨论】:

  • 旁注:您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • 为什么要将日期存储为nvarchar(max),将它们保存为正确的类型datedatetime
  • @marc_s 感谢您的建议。存储过程实际上是一个遗留的开发产品,用于实现一些重要的业务逻辑。不幸的是,存储过程被其他一些生产系统采用,因此存储过程不太可能被修改。但是,我会牢记您的命名约定建议,并避免下次这样做:)
  • @Charlieface 感谢您的建议。正如在另一条评论中回答的那样,存储过程是一些遗留开发产品。我的猜测是,对于某些系统集成,它们被保留为 narchar/string,但我认为我不会评论这是否是一种好的做法,因为它与 ADF 无关。

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


【解决方案1】:

我想分享我的最终端到端工作解决方案。

以下是我的最终流水线的简化概述: 触发 SP 的查找活动;然后设置 2 个变量,然后馈送到下游数据流。

提供给 SP 的参数语法: 您必须检查 2 个输出的 Treat as null 选项。然后将日期字符串提供给 SP。

读取 SP 输出并设置变量(此处仅使用 START_DATE 作为示例,因为 END_DATE 相同):

输入@activity('SP_DEDUCE_START_DATE_END_DATE').output.firstRow.startdate

要将 2 个变量提供给下游数据流:

在管道表达式中输入@variables('START_DATE')

【讨论】:

    猜你喜欢
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    相关资源
    最近更新 更多