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