Stored procedures 将datetime参数从管道传递到数据流源存储过程azure数据工厂

Stored procedures 将datetime参数从管道传递到数据流源存储过程azure数据工厂,stored-procedures,azure-data-factory,dataflow,Stored Procedures,Azure Data Factory,Dataflow,当我试图将datetime参数从管道传递到数据流存储过程时,我遇到了这个问题。 我使用存储过程获取完整或增量数据集。 管道看起来像这样 在查找中,我得到的是“不适用”或上次加载日期。要确定我需要完全负载还是增量负载。 之后,我用以下表达式将其传递给dataflow: LoadStartDate活动“GetLastLoadData”。输出。值[0]。LastLoadedDate LoadEndDate ifequalsactivity'GetLastLoadData'。输出。值[0]。LastLo

当我试图将datetime参数从管道传递到数据流存储过程时,我遇到了这个问题。 我使用存储过程获取完整或增量数据集。 管道看起来像这样 在查找中,我得到的是“不适用”或上次加载日期。要确定我需要完全负载还是增量负载。 之后,我用以下表达式将其传递给dataflow:

LoadStartDate活动“GetLastLoadData”。输出。值[0]。LastLoadedDate LoadEndDate ifequalsactivity'GetLastLoadData'。输出。值[0]。LastLoadedDate,'n/a',pipeline.TriggerTime

输出看起来不错,据我所知,数据流的参数是用datetime字符串设置的:

Input
{
    "dataflow": {
        "referenceName": "dataflow1",
        "type": "DataFlowReference",
        "parameters": {
            "LoadStartDate": "'2021-01-16 14:15:36.697'",
            "LoadEndDate": "'2021-03-25T18:08:48.7558444Z'"
        },
存储过程有两个定义为字符串的参数。我在做验证

 CREATE PROCEDURE [dbo].[Export]
@LoadStartDate VARCHAR(30) = NULL,
@LoadEndDate VARCHAR(30) = NULL

AS 

DECLARE @error VARCHAR(200) = NULL

IF (@LoadStartDate IS NULL AND @LoadEndDate IS NOT NULL) OR
   (@LoadStartDate IS NOT NULL AND @LoadEndDate IS NULL)
   SELECT @error = 'Parameters @LoadStartDate and @LoadEndDate should be specified.'

IF @LoadStartDate IS NOT NULL AND TRY_CAST(@LoadStartDate AS DATETIME2(3)) IS NULL 
SELECT @error = 'Parameter @LoadStartDate is not a date.'
IF @LoadEndDate IS NOT NULL AND TRY_CAST(@LoadEndDate AS DATETIME2(3)) IS NULL 
SELECT @error = ' Parameter @LoadEndDate is not a date.'
在ManagementStudio中,程序运行良好,但在adf中不起作用

ADF数据流有两个定义为字符串的参数

源的设置如下所示:

当我删除输入参数时,一切都能正常工作,但当我尝试指定参数时,它失败了

Error details
Error code
DFExecutorUserError
Troubleshooting guide
Failure type
User configuration issue
Details
{"StatusCode":"DFExecutorUserError","Message":"Job failed due to reason: Incorrect syntax near '-'.","Details":"Incorrect syntax near '-'."}
Source
Pipeline
LoadDataSetCompany_copy1
Data flow
dataflow1
Monitor
Data flow activity
LoadDataSet
在将参数传递给数据流的过程中,我还尝试选中表达式复选框,但没有帮助

有人知道怎么回事吗


感谢您的回答。

根据我的经验,您可能不需要使用数据流来构建管道。存储过程是数据流的新手,可能仍然存在一些问题

请尝试查找活动+复制活动来构建管道,它应该可以正常工作


HTH.

我与microsoft支持人员进行了讨论,在他们的帮助下,我最终解决了这个问题

要在数据流中传递参数的表达式应类似于“{$LoadStartDate}”。通过这种方式传递参数后,出现了解析错误

此外,在我的存储过程中,如果参数包含不合适的值,我会在参数验证后使用t-sql throw。应该避免抛出,当我删除它时,数据流开始按预期工作


希望此信息能为某人节省时间。

您能检查源数据预览吗?是的,但只有在我没有为存储过程HI@edKud指定输入参数的情况下,您是否使用其他活动数据流?你能尝试lookup+copy active来构建你的管道吗?@LeonYue谢谢这似乎只是一个可行的案例是的,不客气。我可以把它贴出来作为答案吗?不幸的是,我不得不这么做。因为我需要对数据集执行大量转换和验证。但根据您的建议,我可以将数据暂存并使用暂存数据集作为源