2017-08-11 121 views
0

我想知道遊標的用途是什麼?我在谷歌搜索和我讀了光標用於操縱就像這個例子光標使用。在這個例子中,select語句Select firstName, lastName FROM myTable返回行在SQL中使用遊標

和數據,當我與光標執行整個查詢那麼這將返回相同的選擇聲明返回所以有什麼區別?我們可能只使用select而不是光標?這裏的光標有什麼用?任何人都可以解釋,請用簡單的話

DECLARE @fName varchar(50), @lName varchar(50) 

DECLARE cursorName CURSOR -- Declare cursor 

LOCAL SCROLL STATIC 

FOR 

Select firstName, lastName FROM myTable 

OPEN cursorName -- open the cursor 

FETCH NEXT FROM cursorName 

    INTO @fName, @lName 

    PRINT @fName + ' ' + @lName -- print the name 

WHILE @@FETCH_STATUS = 0 

BEGIN 

    FETCH NEXT FROM cursorName 

    INTO @fName, @lName 

    PRINT @fName + ' ' + @lName -- print the name 

END 

CLOSE cursorName -- close the cursor 

DEALLOCATE cursorName -- Deallocate the cursor 

回答

0

許多DBA的和開發商有光標愛/恨關係。有些人會告訴你不要使用它,其他人認爲沒有危險,你可以使用它。和許多其他工具一樣,光標只是用於某些特定場景的另一種工具,正確使用可能是一個很棒的工具。但錯誤使用會導致嚴重的性能問題。

遊標在一行的基礎上工作,是RBAR「Row By Agonizing Row」的完美示例,而不是tsql閃耀的基於集合的操作。您提供的示例是一個非常糟糕的正確遊標使用示例,是的,它可以向您顯示遊標的工作方式,但正如您所評論的那樣,可以使用簡單的SELECT完成相同的操作。

如果你做你的首選搜索引擎的快速搜索會找到很多有關遊標的好參考,這裏有一些閱讀: