我曾嘗試循環使用臨時表,但沒有用,最終只出現了很多錯誤。通過臨時表進行迭代
請幫我我如何能工作的這一個..
我需要的是這樣的:
- 我需要獲取從表中的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
請問你的目標表(*另一*當你把它稱爲) 看起來像? – peterm 2013-03-02 07:13:07
它只包含一個ID = PK coulmn和一個值列..我需要添加到值列 – James 2013-03-02 07:14:36