【问题标题】:Run stored procedure for each row of a table为表的每一行运行存储过程
【发布时间】:2014-06-11 07:27:47
【问题描述】:

我有一张看起来像这样的桌子

value_1  value_2  value_3
---------------------------
   1        2        3
   4        5        6
   7        8        9
   ...     ...     ...

我需要为这个表的每一行运行一个存储过程,比如

foreach value_1, value_2, value_3 from my_table
exec spProcedure value_1, value_2, value_3

有没有办法做到这一点?

【问题讨论】:

标签: sql tsql stored-procedures


【解决方案1】:

你可以使用光标:

DECLARE @value1 INT,
        @value2 INT,
        @value3 INT 

DECLARE cursorElement CURSOR FOR
            SELECT  value_1, value_2, value_2
            FROM    table


OPEN cursorElement
FETCH NEXT FROM cursorElement INTO @value1, @value2, @value3

WHILE ( @@FETCH_STATUS = 0 )
BEGIN
    exec spProcedure @value1, @value2, @value3

    FETCH NEXT FROM cursorElement INTO @value1, @value2, @value3
END         
CLOSE cursorElement
DEALLOCATE cursorElement

【讨论】:

  • 谢谢,这就是我要找的。 :)
【解决方案2】:

另一种方式:

DECLARE @MemoryTable table (
    RowID int,
    value_1 int,
    value_2 int,
    value_3 int
)

INSERT INTO @MemoryTable
SELECT ROW_NUMBER() OVER (ORDER BY value_1) AS RowID, * FROM SampleTable


DECLARE @ctr INT
DECLARE @MaxRownum INT

DECLARE @val1 INT
DECLARE @val2 INT
DECLARE @val3 INT


SET @ctr = 1
SET @MaxRownum = (SELECT COUNT(1) FROM @MemoryTable)


WHILE @ctr <= @MaxRownum
BEGIN

    SELECT @val1 = value_1,
           @val2=value_2,
           @val3=value_3
    FROM @MemoryTable
    WHERE RowID = @ctr

    exec spProcedure @val1, @val2, @val3

    SET @ctr = @ctr + 1
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2017-03-28
    • 2017-11-01
    • 2023-04-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多