在 SQL Server 中的存储过程中循环 [英] Loop in stored procedure in SQL server

查看:86
本文介绍了在 SQL Server 中的存储过程中循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要帮助编写调用另一个存储过程并将值传递给它的存储过程.到目前为止,这是在 C# 中完成的,现在我想将它移动到存储过程并创建一个在特定时间调用它的 SQL 代理作业.有任何想法吗?情况就是这样.

I need help with writing stored procedure that calls another stored procedure and passes values to it. So far this was done in C#, now I want to move it to stored procedure and make an SQL agent job that calls it at specific time. Any ideas? This is the case.

表A:

PK_TableA_ID

Table B:

PK_TableB_ID

存储过程SP1:

@TableA_ID
@TableB_ID

我需要这个,但在 T-SQL 中

I need this but in T-SQL

foreach(var TableAId in TableA)
{
foreach(var TableBId in TableB)
{
//call stored procedure 
SP1(TableAId, TableBId);
}
}

推荐答案

以下是如何使用游标执行循环的示例:

Here's an example of how you can use cursors to do loops:

-- set up some test data
declare @table_a table (PK_TableA_ID int)
declare @table_b table (PK_TableB_ID int)
insert @table_a values (1),(2),(3)
insert @table_b values (4),(5),(6)    

-- do the actual processing
SET NOCOUNT ON

DECLARE @TableA_ID int, @TableB_ID int

DECLARE TableA_cursor CURSOR FOR SELECT PK_TableA_ID FROM @table_a

OPEN TableA_cursor
FETCH NEXT FROM TableA_cursor INTO @TableA_ID

WHILE @@FETCH_STATUS = 0
BEGIN
    DECLARE TableB_cursor CURSOR FOR SELECT PK_TableB_ID FROM @table_b

    OPEN TableB_cursor
    FETCH NEXT FROM TableB_cursor INTO @TableB_ID

    WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT CAST(@TableA_ID AS CHAR(1)) + ':' + CAST(@TableB_ID AS CHAR(1))
        -- execute your stored procedure here:
        -- EXEC Your_stored_procedure (@TableA_ID, @TableB_ID) 
        FETCH NEXT FROM TableB_cursor INTO @TableB_ID
        END

    CLOSE TableB_cursor
    DEALLOCATE TableB_cursor

    FETCH NEXT FROM TableA_cursor INTO @TableA_ID
END 
CLOSE TableA_cursor
DEALLOCATE TableA_cursor

上面的光标(带有临时表中的测试数据)将生成以下输出:

The cursor above (with the test data in the temporary tables) will generate this output:

1:4
1:5
1:6
2:4
2:5
2:6
3:4
3:5
3:6

不过,使用游标可能不是解决问题的最佳方法.

Using cursors might not be the best way to solve your problem though.

这篇关于在 SQL Server 中的存储过程中循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆