Sql-Server-2008-R2
如何從游標獲取表變數?
我有一個游標定義為:
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 年代的平面文件處理……更糟糕的是,有這麼多列聲明這些變數會令人望而卻步。