Sql-Server-2008-R2

如何從游標獲取表變數?

  • April 23, 2018

我有一個游標定義為:

DECLARE idCursor CURSOR         
   FOR SELECT DISTINCT [id], [data]
       FROM #tempTable  

我有一個變數定義為:

DECLARE @currentId TABLE (
                           [id] int,
                           [data] char(1)
                        );  

但是當我嘗試將下一個結果提取到@currentId

FETCH NEXT FROM idCursor INTO @currentId  

我收到此錯誤:

Must declare the scalar variable "@currentId".  

如何獲取表中游標提取的結果?我知道我可以聲明兩個變數並單獨儲存結果。但是對於具有許多列的表來說,這將是耗時的。

不,您不能將標量值從游標行提取到表變數中。您必須聲明變數,獲取它們,然後插入:

FETCH NEXT FROM idCursor INTO @id, @data;
INSERT @currentId([id],[data]) SELECT @id, @data;

但是,也許您根本不需要游標。為什麼一次處理一行?為什麼不用@table最初填充的任何查詢來填充變數#tempRemaining

INSERT @currentId([id], [data])
SELECT DISTINCT [id], [data]
   FROM #tempTable;

或者甚至只是單獨使用#tempTable並完全跳過表變數?甚至可能跳過#temp 表?與表變數和#temp 表結合的游標聽起來就像一場噩夢。

冒著聽起來像 Celko 的風險,這似乎很像 1970 年代的平面文件處理……更糟糕的是,有這麼多列聲明這些變數會令人望而卻步。

引用自:https://dba.stackexchange.com/questions/107939