Welcome to Sign in | Help
in Search

Pointer in SQL??

Last post 05-20-2010, 1:27 PM by B_gd_n[ ]Sahlean. 4 replies.
Sort Posts: Previous Next
  •  05-20-2010, 10:23 AM 8287

    Pointer in SQL??

    As vrea sa stiu daca se poate face urmatoarea chestie:
     Am 5 tabele cu date: tabela A,B,C,D,E si o tabela  X care contine ca si camp nume_tabela si este populata cu numele tabelelor(A-E)
     Vreau sa parcurg intr-un while pe tabela X toate datele care se afla in tabelele(A-E), nu stiu daca este posibil !!
     Am 2005 instalat daca are vreo relevanta.
  •  05-20-2010, 12:17 PM 8288 in reply to 8287

    Re: Pointer in SQL??

    Mai jos ai o varianta "muncitoreasca" (copy+paste) dar acest lucru se poate face si prin dinamic sql pt a genera un select si apoi se poate executa... daca raspunsul meu nu te ajuta, am sa te rog sa detaliezi putin (mai mult) problema.

    BEGIN TRAN

    CREATE TABLE A (

    id int IDENTITY(1,1) PRIMARY KEY,

    info nvarchar(100)

    )

    CREATE TABLE B (

    id int IDENTITY(1,1) PRIMARY KEY,

    info nvarchar(100)

    )

    CREATE TABLE C (

    id int IDENTITY(1,1) PRIMARY KEY,

    info nvarchar(100)

    )

    CREATE TABLE D (

    id int IDENTITY(1,1) PRIMARY KEY,

    info nvarchar(100)

    )

    CREATE TABLE E (

    id int IDENTITY(1,1) PRIMARY KEY,

    tabela nvarchar(100),

    pk_in_tabela int

    )

    INSERT INTO A(info)

    VALUES ('A1'), ('A2')

    INSERT INTO B(info)

    VALUES ('B1'), ('B2')

    INSERT INTO C(info)

    VALUES ('C1'), ('C2')

    INSERT INTO D(info)

    VALUES ('D1'), ('D2')

    INSERT INTO E(tabela, pk_in_tabela)

    VALUES ('A',1), ('B', 1), ('C', 2), ('D', 2)

    DECLARE @i int, @CountOfE int

    SELECT @i = 1,

    @CountOfE = MAX(id)

    FROM E

    WHILE @i<= @CountOfE BEGIN

    SELECT E.*, COALESCE(A.info, b.info, c.info, d.info) AS TableInfo

    FROM E

    LEFT JOIN A ON E.pk_in_tabela = A.id AND E.tabela = 'A'

    LEFT JOIN B ON E.pk_in_tabela = B.id AND E.tabela = 'B'

    LEFT JOIN C ON E.pk_in_tabela = C.id AND E.tabela = 'C'

    LEFT JOIN D ON E.pk_in_tabela = D.id AND E.tabela = 'D'

    WHERE e.id = @i

    SET @i = @i + 1

    END

    ROLLBACK


    Cătălin D.
  •  05-20-2010, 12:25 PM 8289 in reply to 8287

    Re: Pointer in SQL??

    De cele mai multe ori e bine sa eviti cursoarele sau "while". Ce vrei sa faci? Daca dai ceva amanunte putem incerca sa gasim o solutie set based.
  •  05-20-2010, 12:35 PM 8290 in reply to 8289

    Re: Pointer in SQL??

    Apropo de ce spunea Diana .... eu am bagat acea bucla WHILE doar pt ca asta ai cerut, selectul merge mai bine daca elemini while-ul si conditia de where...
    Cătălin D.
  •  05-20-2010, 1:27 PM 8292 in reply to 8287

    Re: Pointer in SQL??

    werty80:
    ...
     Vreau sa parcurg intr-un while pe tabela X toate datele care se afla in tabelele(A-E), nu stiu daca este posibil !!

    Ce înseamnă că vrei să parcurgi ... ? Un simplu SELECT ... FROM fiecare_tabela ?

    sp_MSforeachtable te ajută cu ceva ?

    Dacă tabelele A-E au structura identică sau cel puţin asemănătoare şi numărul acestor tabele este fix (din ce ai scris deduc ca este fix) atunci poţi folosii UNION ALL:

    SELECT ...
    FROM
    (
    SELECT ... FROM A
    UNION ALL
    SELECT ... FROM B
    UNION ALL
    ...
    SELECT ... FROM E
    ) AS Subquery


View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems