接好久之前太監的一篇Blog?,F在補充幾個選項的介紹
所用的語句都是這個
IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1GOCREATE TABLE T1( ID INT PRIMARY KEY, seq INT)DECLARE @seq INT=0WHILE @seq < 50BEGIN INSERT INTO dbo.T1 ( ID,seq ) VALUES ( @seq+1,@seq) SET @seq=@seq+1END
1 DECLARE @seq INT,@ID INT=1 2 3 4 DECLARE CUR_Static CURSOR STATIC|DYNAMIC|KEYSET|FAST_FORWARD 5 FOR SELECT ID,seq FROM T1 ORDER BY ID 6 7 OPEN CUR_Static 8 FETCH NEXT FROM CUR_Static INTO @ID,@seq 9 WHILE @@FETCH_STATUS = 010 BEGIN 12 PRINT @seq13 FETCH NEXT FROM CUR_Static INTO @ID,@seq 14 END15 CLOSE CUR_Static16 DEALLOCATE CUR_Static
Static 選項
Static選項相當于從tempdb里面完全緩存一個結果集。外部修改數據,并不影響到游標本身(修改游標結果集任意一列都不影響)。使用Static選項的話,不能執行更新游標的 Current of 操作
PS:就是說你在執行這段代碼的時候,另外一個窗口即時插入新數據,修改數據,刪除數據也不會影響到當前游標
Keyset 選項
Keyset 選項也是從tempdb里面緩存一個結果集,只緩存一個主鍵。外部修改數據,不能修改主鍵,修改其它列是有效的。如果基表該行被刪除了,@@Fetch_State返回值為-2
PS:就是說你在執行這段代碼的時候,另外一個窗口即時插入新數據沒有影響。修改非主鍵數據可以獲取到,如果數據不存在就88啦
新聞熱點
疑難解答