我们有一个SQL Server存储过程,该过程返回增量记录。如果对该表没有任何更改,则不返回任何内容。存储过程可以完成预期的工作。
我们正在通过Azure数据工厂中的“复制”活动来调用上述存储过程。它适用于所有情况,除非什么都没有返回(空)。
我们正在寻找一个选项,其中从存储过程中返回Nothing(Empty),管道应该跳过并继续进行,并标记整个管道成功而不是失败。
谢谢
答案 0 :(得分:0)
您的存储过程需要以SELECT结尾,因此它返回一些内容-如果没有要返回的行,则包括一个空集。
但是,如果没有行,要跳过管道,DraganB的最后一个答案很有意义,我必须在当前项目中这样做两次。
答案 1 :(得分:0)
正如@DraganB在评论中所说,活动可以在流中运行,所以您可以执行stored procedure activity --> if activity --> copy activity
。如果sp活动的输出为空,则不要运行复制活动并结束管道。
另一个想法,也许您可以了解天蓝色函数external table trigger。您可以在表中添加一个状态列,例如needToBeCopied
,每个插入或更新操作都会更改该列。然后在运行复制活动时过滤需要复制的数据。
答案 2 :(得分:0)
解决了。真正的问题是复制活动没有返回正确的错误消息。访问控制出现问题。
Grant VIEW CHANGE TRACKING permission on a table to a user:
[sql]
GRANT VIEW CHANGE TRACKING ON OBJECT::dbo.databaselog to username
[/sql]
增量加载方法是通过对SQL Server数据库和所需表启用更改跟踪。 Azure数据工厂应记录为“某某表权限不足”错误。相反,它使整个管道失败,并显示错误消息,因为“存储过程可能无效或存储过程未返回任何输出”。
无论如何,我们分配了正确的权限,此问题已解决。现在,当存储过程没有返回任何输出时,它会创建一个带有标题记录的空文件,同样在-Data Factory Avoiding creation of empty files
中