Sql server SQL Server Service Broker-处理特定架构中的存储过程

Sql server SQL Server Service Broker-处理特定架构中的存储过程,sql-server,service-broker,Sql Server,Service Broker,我目前正在从事一个新项目,希望在该项目中,能够动态地自动化数据库中特定模式中所有存储过程的执行。我希望能够简单地将存储过程添加到特定的模式(例如Build),并拥有一个按照设置的时间表运行的进程,该时间表只需迭代模式中的所有存储过程,并并行运行它们 我们已经构建了一个现有的定制ETL系统,它将允许我们设置一系列作业,这目前依赖于使用多个代理作业,这些作业将拾取存储过程并执行它们。我希望我们的新项目能使用更好的东西,并认为服务代理将是答案 我调查过这个产品:它似乎提供了一些预构建的代码,可以让我对

我目前正在从事一个新项目,希望在该项目中,能够动态地自动化数据库中特定模式中所有存储过程的执行。我希望能够简单地将存储过程添加到特定的模式(例如Build),并拥有一个按照设置的时间表运行的进程,该时间表只需迭代模式中的所有存储过程,并并行运行它们

我们已经构建了一个现有的定制ETL系统,它将允许我们设置一系列作业,这目前依赖于使用多个代理作业,这些作业将拾取存储过程并执行它们。我希望我们的新项目能使用更好的东西,并认为服务代理将是答案

我调查过这个产品:它似乎提供了一些预构建的代码,可以让我对过程进行排队,但是我无法提取它们提供的数据库,显然它有一个损坏的头:-(

我是服务代理领域的新手,在解决如何自动获取一些东西以将一组并行执行的存储过程排队时遇到了一点困难

任何帮助都将不胜感激


干杯

用我最喜欢的一位诗人的话来解释“没有技术,没有问题”。Service Broker是异步处理的一个很好的解决方案,但它似乎并不适合这里。特别是,如果您只想运行(可能未知)动态SQL似乎更适合我,比如(未测试)

创建或更改过程dbo.gottaRunEmAll
作为
开始
声明p游标快进,本地用于
选择名称
从sys.objects
其中schema_id=schema_id('Build');
开放p;
声明@name sysname、@sql nvarchar(max);
而(1=1)
开始
从p获取下一个到@name;
如果(@@rowcount 0)
打破
设置@sql=concat('exec[Build].',quotename(name),';');
exec(@sql)
结束
闭合p
解除分配p
结束

更好(海事组织)将显式维护上述过程,以调用所需的过程以及所需的方式。

谢谢!我实际上正在创建一个非常类似的存储过程,但希望能够并行运行存储过程,因为它们将构建不同的表。到目前为止,上述过程仍将有效我们开始获得越来越多的版本。感谢您的帮助!我使用您的代码,再加上本文中的代码,成功地使其工作起来:我使用您的代码收集所有过程,然后使用文章中的代码将它们排入service broker的队列。到目前为止,工作非常顺利!调试问题有点复杂,但希望不会出现问题太多的问题需要深入研究。干杯
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