Welcome to Sign in | Help
in Search

Parametru tip int

Last post 09-05-2007, 3:17 PM by ssandu. 5 replies.
Sort Posts: Previous Next
  •  09-05-2007, 12:50 PM 2602

    Parametru tip int

    Am o procedura de tipul

    select * from tabel where tip IN (@tipuri)

    tip este de tip int si vreau sa-i pasez mai multe int

    Trebuie sa devina ceva de genul select * from tabel where tip IN (0,1,2)

    Cum sa fac parametrul @tipuri ?

    varchar nu merge.


    Sorin Sandu
  •  09-05-2007, 1:07 PM 2603 in reply to 2602

    Re: Parametru tip int

    De exemplu poti sa:

    - folosesti un "varchar" @tipuri - '0, 1, 2'

    - scrii o functie "table valued" care ia la "intrare" parametrul @tipuri si un delimitator, face un "split" al sirului @tipuri dupa delimitator (in cazul de fata virgula) si "intoarce" valorile (---> 0, 1, 2) intr-un tabel.

    - SELECT <lista_campuri> FROM tabel WHERE tip IN (SELECT * FROM functie(@tipuri, ',')) 

    Daca lucrezi cu SQL 2005, poti safolosesti o functie CLR - .NET este superior TSQL in ceea ce priveste lucrul cu sirurile.

     

  •  09-05-2007, 1:23 PM 2604 in reply to 2603

    Re: Parametru tip int

    Se poate de asemenea imagina si o solutie pe baza de "dynamically build SQL statement" - poti de exemplu concatena 'SELECT <lista_campuri'> FROM tabel WHERE tip IN(', CAST(<valoare_numerica> AS varchar(2)),.......,')'. Intre valorile numerice nu uita sa adaugi virgule...Smile

    Apoi poti folosi sp_executesql pentru sirul rezultat.

     

  •  09-05-2007, 1:30 PM 2605 in reply to 2603

    Re: Parametru tip int

    Sau folositi sql dinamic si aveti grija la sql injection:

    DECLARE @InVariable varchar(1024);
    DECLARE @SQLString nvarchar(500);

    DECLARE @ParmDefinition nvarchar(500);

    SET @ParmDefinition = N'@tipuri varchar(1024)';

    SET @SQLString =N'select * from tabel where tip IN (@tipuri)';

    SET @tipuri='1,2,3';

    EXECUTE sp_executesql @SQLString, @ParmDefinition,
                          @tipuri= @InVariable;


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  09-05-2007, 2:12 PM 2606 in reply to 2605

    Re: Parametru tip int

    Definesti parametrul procedurii de tip NVARCHAR. Cand apelezi procedura stocata ii transmiti lista de valori sub forma unei structuri in format XML.

     

    Exemplu: <root> <parametru valoare="111"/> <parametru valoare="..."/> ... </root>

    Procesezi datele in format XML transmise ca parametru (vezi @xml) cu ajutorul OPENXML.

     

    Exemplu: 

    DECLARE @xml NVARCHAR(255)
    SET @xml = '<root> <parametru valoare="111"/> <parametru valoare="222"/> <parametru valoare="333"/> </root>'

    DECLARE @id_xml INT
    EXEC sp_xml_preparedocument @id_xml OUTPUT, @xml

    SELECT *
    FROM Articol
    WHERE IdArticol IN
    (

    SELECT valoare
    FROM OPENXML (@id_xml, '/root/parametru') WITH ( valoare INT )
    )


    EXEC sp_xml_removedocument @id_xml

     Sau inserezi valorile din @xml intr-o tabela (ex. variabila tabela; pp. ca nu sunt multe valori).

     

    Exemplu:

    DECLARE @xml NVARCHAR(255)
    SET @xml = '<root> <parametru valoare="111"/> <parametru valoare="222"/> <parametru valoare="333"/> </root>'

    DECLARE @tabel TABLE (parametru INT)

    DECLARE @id_xml INT
    EXEC sp_xml_preparedocument @id_xml OUTPUT, @xml

    INSERT INTO @tabel (parametru)
    SELECT valoare
    FROM OPENXML (@id_xml, '/root/parametru') WITH ( valoare INT )

    EXEC sp_xml_removedocument @id_xml

    SELECT *
    FROM Articol
    WHERE IdArticol IN

    (

    SELECT parametru FROM @tabel

    ) 

  •  09-05-2007, 3:17 PM 2607 in reply to 2606

    Re: Parametru tip int

    Va multumesc ptr. raspunsuri.

    Am adoptat prima solutie (cea cu functia Table-valued) si a functionat.


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