Welcome to Sign in | Help

Re: Cursors

  •  10-17-2006, 9:44 AM

    Re: Cursors

    T-SQL lucreaza cu record set-uri adica "multimi de inregistrari" (sau set de rezultate) intr-o traducere libera. Programatorii sunt obisnuiti cu o abordare iterativa si atunci s-au introdus cursoarele care permit parcurgerea rand cu rand a unui set de rezultate.

    De cele mai multe ori cursoarele pot fi evitate si este de dorit sa facem asta din motive de performanta.

    Ca exemplu:

    USE tempdb;

    GO

    CREATE TABLE Intrebari (ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,

                                        TextIntrebare VARCHAR(MAX));

    GO

    INSERT INTO Intrebari(TextIntrebare) SELECT 'Tipuri de date';

    INSERT INTO Intrebari(TextIntrebare) SELECT 'Design Tabel';

    INSERT INTO Intrebari(TextIntrebare) SELECT 'Ce este un cursor';

    GO

     

    -- Exemplu cursor

    DECLARE @ID_Intrebare int, @Text_Intrebare nvarchar(MAX);

     

    -- Declaram cursorul

    DECLARE intrebari_cursor CURSOR FOR

          SELECT ID, TextIntrebare FROM Intrebari

    -- Deschidem cursorul

    OPEN intrebari_cursor

    -- Preluam primul rand in variabilele declarate

    FETCH NEXT FROM intrebari_cursor INTO @ID_Intrebare, @Text_Intrebare

    -- Cat timp avem inregistrari continuam

    WHILE @@FETCH_STATUS = 0

     BEGIN

      -- Afisam continutul variabilelor

      SELECT @ID_Intrebare, @Text_Intrebare  

      FETCH NEXT FROM intrebari_cursor INTO @ID_Intrebare, @Text_Intrebare

     END

    -- Inchidem cursorul si il dealocam

    CLOSE intrebari_cursor

    DEALLOCATE intrebari_cursor

    GO

    -- Output

    1           Tipuri de date

    (1 row(s) affected)

     

    2           Design Tabel

    (1 row(s) affected)

     

    3           Ce este un cursor

    (1 row(s) affected)

    Alternativa in acest caz este foarte simpla:

    -- Alternativa set based

    SELECT ID, TextIntrebare FROM Intrebari

     


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems