Sql 遍历临时表

Sql 遍历临时表,sql,sql-server,database,sql-server-2008,Sql,Sql Server,Database,Sql Server 2008,我确实试过在一个临时表中循环,但没有用,结果只出现了这么多错误 请帮我解决这个问题 我的需要是: 我需要从表中获取一个ID列,并将其存储在一个临时表中 然后遍历每个ID,并执行一个将该ID作为参数的存储过程 在另一个表中插入该存储过程的返回值(=一列) 请指导我怎么做 我确实搜索了很多..但是被游标和基于集合的联接弄糊涂了。IMHO在您的情况下,您不需要临时表 假设您有以下两张表。首先是源表,另一个是目标表 CREATE TABLE mytable(id INT IDENTITY PRIM

我确实试过在一个临时表中循环,但没有用,结果只出现了这么多错误

请帮我解决这个问题

我的需要是:


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


我确实搜索了很多..但是被游标和基于集合的联接弄糊涂了。

IMHO在您的情况下,您不需要临时表

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

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;
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来完成如下工作

CREATE PROCEDURE getValue (@id INT, @value INT OUT) 
AS
 SET NOCOUNT ON;
 SET @value = @id * 2;
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;
你会进入我的表格2

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

这里正在工作

您的目标表(您称之为另一个)是什么样子的?它只包含一个ID=PK coulmn和一个values列。我需要添加到值中column@James请参阅更新的答案。如果目标表中已填充ID,则可以使用
UPDATE
而不是
INSERT