2013-03-02 110 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