Sql 动态存储过程执行

Sql 动态存储过程执行,sql,sql-server,Sql,Sql Server,我在一个表中有一个存储过程列表,其中包含需要动态/同时执行的日期-时间 正常执行工作正常,但按顺序执行所有过程 表结构 +----------+----------+-----------------------+ | Screenid | SP Name | ExecutionTime | +----------+----------+-----------------------+ | 102457 | SPName1 | 2017-03-02 09:15:000

我在一个表中有一个存储过程列表,其中包含需要动态/同时执行的日期-时间

正常执行工作正常,但按顺序执行所有过程

表结构

+----------+----------+-----------------------+
| Screenid | SP Name  |     ExecutionTime     |
+----------+----------+-----------------------+
|   102457 | SPName1  | 2017-03-02 09:15:000  |
|   103587 | SpName7  | 2017-03-02 09:15:000  |
|   104578 | SPName15 | 2017-03-02 10:25:0000 |
+----------+----------+-----------------------+
这是我的代码:

DECLARE Tbl_cursor CURSOR FOR  
    SELECT DISTINCT Srctable,SrcSP,Truncatereq,executeReq,exectime
    FROM IDB_Define_Source a (nolock)
    WHERE exectime < getdate()
      AND execstatus = 'N'
    ORDER BY exectime

OPEN Tbl_cursor;  

-- Perform the first fetch.  
FETCH NEXT FROM Tbl_cursor INTO @srctable, @srcSp, @trunreq, @exereq, @exetime ;  

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.  
WHILE @@FETCH_STATUS = 0  
BEGIN  
    BEGIN TRY 
        DECLARE @str nvarchar(max)

        SET @str = 'EXEC reportsdb.reportuser.'+ @srcSp

        EXEC sp_executesql @str

        UPDATE T1
        SET execstatus = 'Y'
        FROM IDB_Define_Source T1
        WHERE Srctable = @srctable
    END TRY
    BEGIN CATCH
        UPDATE T1
        SET exectime = exectime + datediff(dd, exectime, getdate()) + 1,
            execstatus = 'Y',
            ErrorDtl = ERROR_MESSAGE()
        FROM IDB_Define_Source T1
        WHERE Srctable = @srctable
    END CATCH

    -- This is executed as long as the previous fetch succeeds.  
    FETCH NEXT FROM Tbl_cursor INTO @srctable, @srcSp, @trunreq, @exereq, @exetime;  
END  

CLOSE Tbl_cursor;  
DEALLOCATE Tbl_cursor;  

您可以使用游标,然后尝试以下逻辑

声明@querytext SET@Query=从Tablename中选择Col\u SP
执行sp_executesql@Query是,您可以调用all in循环。从表中获取列表,进行while循环并调用它。下面是一个简单的例子

DECLARE @Total_Count INT,@Counter  INT = 1;
SELECT ROW_NUMBER() OVER(Order by SPName) RowNo,SPName 
INTO #TmpTable
FROM #TableName

SET @Total_Count = (Select Max(RowNo) from #TmpTable);

WHILE @Counter <= @Total_Count 
BEGIN
    Declare @EXESPName Varchar(200);
    @EXESPName = (Select SPName FROM TmpTable WHERE RowNo = @Counter)
   Exec @EXESPName
   SET @Counter = @Counter + 1;
END;

需要直接从sql调用它吗?从SP?提供带有示例数据的表结构,并解释您遇到的困难。。因此,这可以帮助我们了解问题。请编写一个SP,以便根据计划时间执行。请包括您迄今为止尝试过的内容,并添加更多详细信息以了解情况。您好。。此代码将按顺序执行所有SP。我需要同时执行所有SP