Azure数据工厂:源数据集具有用户定义的表类型的存储过程

问题描述 投票:1回答:1

我有一个存储过程,该存储过程接受用户定义的表类型作为参数。我想在Azure数据工厂的复制数据活动的源数据集中使用此SP。我看到了一些示例,在这些示例中,我们可以在接收器数据集中使用用户定义的表类型,但不能与源数据集一起使用。

是否可以使用用户定义的表类型作为参数来执行SP,以从SQL中获取数据并通过Blob存储复制它?

这是我的SP:

CREATE PROCEDURE [export].[up_get_qnxt_enrollment_date]
      @effectiveDate DATETIME
     , @lobPlanDimIDs export.intList READONLY
AS
BEGIN
 ......
END

export.intList是用户定义的表类型:

CREATE TYPE [export].[intList] AS TABLE(
    [Id] [int] NULL,
    [Name] [varchar(256)] NULL
)

我无法在Azure DF的源数据集中设置此参数。我尝试将其设置为JSON数组,但没有运气:

"typeProperties": {
                    "source": {
                        "type": "AzureSqlSource",
                        "sqlReaderStoredProcedureName": "[export].[up_get_qnxt_enrollment_date]",
                        "storedProcedureParameters": {
                            "effectiveDate": {
                                "type": "DateTime",
                                "value": "2004-01-01"
                            },
                            "lobPlanDimIDs": {
                                "type": "export.intList",
                                "value": [
                                    {
                                        "Id": {   "type": "int",  "value": 1   },
                                        "Name": {  "type":  "String", "value": "ABC" }
                                    },
                                    {
                                        "Id": {   "type": "int",  "value": 2   },
                                        "Name": {  "type":  "String", "value": "DEF" }
                                    }
                                ]
                            }
                        },
                        "queryTimeout": "02:00:00"

我是否缺少任何内容,或者此功能在Azure DF中尚不可用?

azure stored-procedures azure-pipelines azure-data-factory-2 user-defined-types
1个回答
0
投票

对于基于配置的更多方法,您可以从实用的文章中查看此博客条目:https://blog.pragmaticworks.com/using-stored-procedure-in-azure-data-factory

当我遇到此问题时,解决问题的方法是使用查询而不是使用存储过程enter image description here

然后像在sql命令行中一样调用查询,例如:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()
DECLARE @lob AS intList
insert into @lob (Id, Name) select 1, 'ABC'
insert into @lob (Id, Name) select 2, 'DEF'
EXEC [up_get_qnxt_enrollment_date] @tmp, @lob

希望这有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.