繁体   English   中英

遍历临时表

[英]Iterate through a temp table

我确实尝试过遍历一个临时表,但是没有用,只会导致很多错误。

请帮我解决这个问题。

我的需求是:


  • 我需要从一个表中获取一个ID列,并将其存储在一个临时表中。
  • 然后遍历每个ID,并执行一个以该ID为参数的存储过程。
  • 在另一个表中插入该存储过程的返回值(=一列)。

请指导我如何执行此操作。

我确实搜索了很多..并且对光标和基于集合的联接感到困惑。

恕我直言,在您的情况下,您不需要临时表。

假设您有以下两个表。 第一个是源表,另一个是目标表。

CREATE TABLE mytable(id INT IDENTITY PRIMARY KEY, col1 nvarchar(10));
CREATE TABLE mytable2(id INT, value INT);

mytable包含以下示例数据:

id          col1
----------------
1           row1      
2           row2      
3           row3      
4           row4 

而且您有一些SP可以根据id进行计算,例如

CREATE PROCEDURE getValue (@id INT, @value INT OUT) 
AS
 SET NOCOUNT ON;
 SET @value = @id * 2;

然后,您可以创建一个SP来完成这样的工作

CREATE PROCEDURE proccessData
AS
  SET NOCOUNT ON;
  DECLARE @id INT, @value INT;
  DECLARE id_cursor CURSOR FOR 
   SELECT id FROM mytable WHERE id > 1 AND id < 4;

  OPEN id_cursor;

  FETCH NEXT FROM id_cursor INTO @id;
  WHILE @@FETCH_STATUS = 0
  BEGIN
    EXEC getValue @id, @value OUTPUT;
    INSERT INTO mytable2 VALUES(@id, @value);
    -- Or use update if you already have id's in mytable2
    -- UPDATE mytable2 SET value = @value WHERE id = @id;
    FETCH NEXT FROM id_cursor INTO @id;
  END
  CLOSE id_cursor;
  DEALLOCATE id_cursor;

致电该SP之后

EXEC proccessData

你会进入mytable2

id          value
----------- -----------
2           4
3           6

这是工作的sqlfiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM