【问题标题】:SQL Server Service Broker - Processing stored procedures in specific schemaSQL Server Service Broker - 处理特定架构中的存储过程
【发布时间】:2018-05-18 01:33:57
【问题描述】:

我目前正在开展一个新项目,希望能够动态地自动执行数据库中特定模式中的所有存储过程。我希望能够简单地将存储过程添加到特定模式(例如构建),并拥有一个按设定时间表运行的进程,该进程简单地遍历模式中的所有存储过程,并并行运行它们。

我们已经构建了一个现有的自定义 ETL 系统,它可以让我们设置一堆作业,这目前依赖于使用多个代理作业,这些代理作业会提取存储过程并执行它们。我希望我们的新项目能够使用更好的东西,并认为 Service Broker 会是答案。

我研究过这个产品:http://partitiondb.com/go-parallel-sql/,它似乎提供了一些预构建的代码,可以让我将程序排队,但是我无法提取他们提供的数据库,显然它有一个损坏的标题: -(

我是服务代理领域的新手,在弄清楚如何自动获取一些东西来排队一堆并行执行的存储过程时遇到了一些困难。

任何帮助将不胜感激。

干杯

【问题讨论】:

    标签: sql-server service-broker


    【解决方案1】:

    套用我最喜欢的诗人之一 - “mo' tech, mo' questions”。 Service Broker 是异步处理的绝佳解决方案,但在这里似乎不太合适。具体来说,如果您只想按计划运行一组(可能未知的)存储过程,动态 SQL 似乎更适合我。类似(未经测试)

    create or alter procedure dbo.gottaRunEmAll
    as
    begin
        declare p cursor fast_forward, local for
        select name
        from sys.objects
        where schema_id = schema_id('Build');
    
        open p;
    
        declare @name sysname, @sql nvarchar(max);
    
        while(1=1)
        begin
            fetch next from p into @name;
            if (@@rowcount <> 0)
                break;
            set @sql = concat('exec [Build].', quotename(name), ';');
            exec(@sql)
        end
        close p
        deallocate p
    end
    

    更好的(imo)将明确维护上述过程以调用您想要的过程以及您想要它们的方式。

    【讨论】:

    • 谢谢!我实际上正在创建一个非常相似的存储过程,但希望能够并行运行这些存储过程,因为它们将构建不同的表。在我们开始获得越来越多的构建之前,上述内容将暂时有效。感谢您的帮助!
    • 我设法使用您的代码以及使用本文中的代码使其工作:rusanu.com/2009/08/05/asynchronous-procedure-execution 我使用您的代码收集所有过程,然后将文章中的代码排队到服务经纪人。到目前为止,工作请客!调试问题有点复杂,但希望不会有太多问题需要深入研究。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多