Welcome to Sign in | Help
in Search

Intrebare de pe ITboard - Refactor Cursor to SELECT

Last post 10-21-2006, 10:48 AM by xmldeveloper. 5 replies.
Sort Posts: Previous Next
  •  10-10-2006, 1:17 PM 297

    Intrebare de pe ITboard - Refactor Cursor to SELECT

    geto_dacul wrote the following post: 

    Un amic de a meu a fost la un interviu si i s-a cerut sa faca un select care sa returneze intr-un camp agregat toate valorile unei coloane de tip text concatenate.

    De ex coloana e nume de tip text(char,varchar) iar in selectul rezultat trebuie sa am in campul de iesire toate valorile coloanei comcatenate de ex gigle,ionel,....georgel.

    Chestia asta se face simplu cu un cursur dar ei vor cu select

    Intrebare mea exista vreo functie sql agregata care face chestia asta?

    Multumesc


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
    Filed under:
  •  10-10-2006, 1:19 PM 298 in reply to 297

    Re: Intrebare de pe ITboard - Refactor Cursor to SELECT

    DECLARE @MyTable TABLE (ID INT PRIMARY KEY, VAL VARCHAR(64))

     

    INSERT INTO @MyTable VALUES (1, 'Cristian')

    INSERT INTO @MyTable VALUES (2, 'Sorin')

    INSERT INTO @MyTable VALUES (3, 'Narcis')

     

    DECLARE @Lista VARCHAR(MAX)

    SET @Lista = '';

     

    SELECT @Lista=@Lista + VAL + ' ' FROM @MyTable

     

    SELECT RTRIM(@Lista) AS Lista

    GO

     

    -- Output

    Lista

    Cristian Sorin Narcis


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  10-10-2006, 1:24 PM 299 in reply to 298

    Re: Intrebare de pe ITboard - Refactor Cursor to SELECT

    multumesc
    Secolul XXI ori va fi religios ori nu va fi deloc
  •  10-21-2006, 12:15 AM 459 in reply to 298

    Re: Intrebare de pe ITboard - Refactor Cursor to SELECT

    foarte interesant raspunsul tau.

    intrebarea: performanta serverului este afectata, daca selectul se face pe un numar mare de inregistrari?

    multumesc anticipat......Yes
     

  •  10-21-2006, 10:28 AM 460 in reply to 459

    Re: Intrebare de pe ITboard - Refactor Cursor to SELECT

    SELECT-ul va face un table scan (toate randurile tabelei sunt scanate).

    Cursor-ul face acelasi lucru insa secvential si folosind mai multe resurse.


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  10-21-2006, 10:48 AM 461 in reply to 460

    Re: Intrebare de pe ITboard - Refactor Cursor to SELECT

    Rulati urmatorul cod si includeti planul de executie (varianta cursor e clar mai neperformanta):

    USE tempdb

    GO

    CREATE TABLE MyTable (ID INT PRIMARY KEY, VAL VARCHAR(64))

    GO

    DECLARE @I INT

    SET @I = 1

    WHILE @I < 100

    BEGIN

    INSERT INTO MyTable (ID,VAL) VALUES (@I, 'VAL:'+CAST(@I AS VARCHAR(4)));

    SET @I=@I+1

    END

    GO

     

    -- Varianta SELECT

    DECLARE @Lista VARCHAR(MAX)

    SET @Lista = '';

    SELECT @Lista=@Lista + VAL + ' ' FROM MyTable

    GO

    -- Varianta CURSOR

    DECLARE @Lista VARCHAR(MAX)

    DECLARE @Valoare VARCHAR(32);

    SET @Lista = '';

     

    DECLARE ListaCursor CURSOR

          FOR SELECT VAL FROM MyTable

    OPEN ListaCursor

    FETCH NEXT FROM ListaCursor INTO @Valoare

    WHILE @@FETCH_STATUS = 0

     BEGIN

      SET @Lista = @Lista + @Valoare + ' '

      FETCH NEXT FROM ListaCursor INTO @Valoare

     END

    CLOSE ListaCursor

    DEALLOCATE ListaCursor

    GO

      

     

     


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