2013-03-02 99 views
0

我曾尝试循环使用临时表,但没有用,最终只出现了很多错误。通过临时表进行迭代

请帮我我如何能工作的这一个..

我需要的是这样的:


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

请指导我如何做到这一点。

我做了很多搜索,并与光标和基于连接混淆。

+0

请问你的目标表(*另一*当你把它称为) 看起来像? – peterm 2013-03-02 07:13:07

+0

它只包含一个ID = PK coulmn和一个值列..我需要添加到值列 – James 2013-03-02 07:14:36

回答

0

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

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

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

+0

非常感谢..我会尝试这一个.. – James 2013-03-02 07:35:44

+0

@James See更新了答案。如果你的目标表已经填充了id,那么你可以使用'UPDATE'而不是'INSERT'。 – peterm 2013-03-02 07:39:17

+0

是的..我会考虑.. – James 2013-03-02 07:43:38