首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套存储过程连接

嵌套存储过程连接
EN

Database Administration用户
提问于 2021-01-31 15:45:06
回答 2查看 139关注 0票数 0

我有一个存储过程,它只是通过一组其他进程查找导入的文件。主SP每5分钟运行一次,在目录中查找新文件,如果有较新的文件,则将它们导入暂存表。

此时,如果它确实导入了一个新添加的文件,那么还有另一个伴随的SP,即ETL将记录从暂存到另一个生产DB中。ETL (EXEC dbo.ETL)发生在每5分钟运行一次的监视SP中。

我的主要问题是,我是否可以让ETL存储过程独立于监视SP运行?如果ETL SP需要超过5分钟的时间,当再次调用监视SP时,如果5分钟前的最后一次调用仍在运行ETL过程,它会使用另一个连接吗?

IOW,我想每5分钟运行一个SP (SP #1),调用其他SPs (可能需要5分钟以上或少于5分钟),而不中断SP #1。

EN

回答 2

Database Administration用户

发布于 2021-01-31 18:20:26

解决方案可以是构建一个运行所需存储过程的简单SSIS包;然后以这种方式从tsql调用它:

代码语言:javascript
复制
declare @execution_id bigint
 exec ssisdb.catalog.create_execution 
  @folder_name = 'folder'
 ,@project_name = 'project_name'
 ,@package_name = 'run_sp.dtsx'
 ,@execution_id = @execution_id output

 exec ssisdb.catalog.start_execution @execution_id

默认情况下,此调用是异步的。

票数 2
EN

Database Administration用户

发布于 2021-01-31 17:23:55

您是否要求您可以异步调用其他存储过程?不,不是本土的,可以这么说。我们通常有两种选择:

使用sp_start_job执行代理作业。请注意,代理作业没有参数,因此,如果要将数据传递到该作业,可以使用表作为通信机制。注意,如果ETL正在运行(通过已启动的代理作业),并且您的监视程序试图再次启动它,那么它将不会启动。如果作业已经在运行,代理将不会启动作业。

使用Service。这是SQL Server中的队列,因此“外部”proc可以向队列发送消息,您可以使用轮询机制轮询队列,也可以使用激活机制(Service在收到消息时启动某些内容)。

还是你的意思不一样?如果是,请澄清。您的最后一句有点混乱,因为您本质上说要运行sp #1而不中断sp #1。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/284377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档