Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    446

    [SQL SERVER] Stored Procedure per esperti

    Salve a tutti,
    ho il quesito del VENERDI alle 17.00

    Vorrei creare una stored procedure un po' particolare ma non so proprio come sbatterci la testa

    Per semplicita', provo a fare un esempio + banale :

    1° Tabella :

    Utenti
    1 Rossi MILANO
    2 Bianchi NAPOLI
    3 Verdi MILANO

    Registro

    ID ID_UTENTE DATA
    1 1 10/10/2004
    2 1 12/10/2004
    3 1 14/10/2004
    4 2 10/10/2004
    5 3 11/10/2004

    Ora, vorrei fare in modo che :
    Con una Stored Procedure, riesca a recuperare :
    1) Tutti gli utenti di MILANO
    2) Provvedere a CICLARE i record trovati nella stored procedure e a fare quindi una SELECT in base all'ID_utente


    Quindi in parole povere :
    E' possibile utilizzare dei cicli ( For o While ) in una Stored Procedure?
    Se la risposta e' positiva e' possibile averne un piccolo saggio o dei link a pagine che trattano l'argomento?

    Grazie mille a tutti
    Veloce,Affidabile,Economico : Scegline 2

    Se la tua ragazza non te la da, tu non prendertela

  2. #2
    una banale JOIN non sarebbe in grado di soddisfarti? e se no, perche'?

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    446
    No, perche' il mio e' stato un semplice esempio.

    Nella situazione reale, devo gestire una tabella di 40 campi in questo modo :

    id | Tipo_utente | Tipo_pagamenti | Tipo_spedizione...........


    Riprendere quelli di un determinato tipo_utente e fare una select della stessa tabella dove vengono visualizzati una volta quelli con tipo_utente = a 1 , un'altra volta quelli con tipo_utente = 2 e cosi via.

    Poi per ognuna di queste select, fare tante select dove tipo_pagamenti = 1.... = 2..... e cosi via....

    Alla fine, fare una select dove vengono presi tutti i record di ogni mini_select e visualizzare solo quelli con ID presenti in ogni mini_select ( che naturalmente saranno filtrati secondo parametri dinamici )

    Dato che tali query le ho fatte scrivendole nel codice ASP e con i cicli mi funzionano bene, volevo trasportarli su Stored Procedure, in modo da velocizzare un po' il tutto.

    Non mi interessa molto avere del codice personalizzato per le mie esigenze attuali, bensi' un tutorial o un esempio che mi spieghi come effettuare cicli utilizzandoli nelle SP.
    Grazie a tutti
    Veloce,Affidabile,Economico : Scegline 2

    Se la tua ragazza non te la da, tu non prendertela

  4. #4
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ti posto 3 esempi che potrebbero tornarti utile :

    ESEMPIO N 1)


    CREATE PROCEDURE ImportaMovimenti2
    (
    @MESECUR varchar(8)
    )

    as

    -- Estraggo tutti i codici clienti che hanno dei movimenti
    DECLARE @cod_cliente VARCHAR(30)
    DECLARE curRecurse CURSOR LOCAL FOR SELECT CCLIE FROM Movimenti where CONS=@MESECUR group by CCLIE order by CCLIE

    -- inizializzo il cursore
    SET NOCOUNT ON
    OPEN curRecurse
    FETCH NEXT FROM curRecurse INTO @cod_cliente

    -- Inizio ciclo che reimposta le associazioni per utenti trovati
    WHILE (@@FETCH_STATUS <> -1 )
    BEGIN
    INSERT INTO Associazioni (NomeUtente, Gruppo, ModificatoIl, ModificatoDa) VALUES (@cod_cliente, 'ASLPV', GETDATE(), 'AS/400')
    FETCH NEXT FROM curRecurse INTO @cod_cliente
    END
    CLOSE curRecurse
    DEALLOCATE curRecurse
    return(0)

    -----------------

    ESEMPIO N 2)

    CREATE PROCEDURE ImportaMovimenti2
    (
    @MESECUR varchar(8)
    )

    as
    INSERT Associazioni (NomeUtente, Gruppo, ModificatoIl, ModificatoDa)
    SELECT CCLIE, 'ASLPV', GETDATE(), 'AS400'
    FROM Movimenti
    GROUP BY CCLIE

    -------

    ESEMPIO N 3)

    CREATE PROCEDURE sp_Insert
    AS
    declare @ID_UTENTE int, @ID_NOME int, @ID_COGNOME int;
    declare curRecurse CURSOR LOCAL FOR SELECT ID_UTENTE, ID_NOME, ID_COGNOME FROM TABELLA1

    SET NOCOUNT ON
    -- inizializzo il cursore
    open curRecurse
    FETCH NEXT FROM curRecurse INTO @ID_UTENTE, @ID_NOME, @ID_COGNOME

    WHILE (@@FETCH_STATUS = 0) --ciclo del cursore
    BEGIN
    INSERT INTO TABELLA2 VALUES (@ID_NOME,@ID_COGNOME)
    FETCH NEXT FROM curRecurse INTO @ID_UTENTE, @ID_NOME, @ID_COGNOME

    END
    CLOSE curRecurse
    DEALLOCATE curRecurse
    return(0)

    GO

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    446
    Grazie mille per la risposta.

    Vorrei utilizzare il secondo metodo.

    Pero' ora mi chiedo una cosa :

    Vorrei creare una stored procedure che implementi questa funzione :

    Prendo una tabella e seleziono i campi che mi interessano in base ad alcuni parametri.
    Metto la tabella risultante in una tabella temporanea.

    Poi dovrei prendere nuovamente la prima tabella e selezionare gli stessi campi in base ad altri parametri.
    Metto la tabella risultante in un'altra tabella temporanea.

    Poi dovrei prendere nuovamente la prima tabella e selezionare gli stessi campi in base ad altri parametri.
    Metto la tabella risultante in un'altra tabella temporanea.

    Alla fine, vorrei prendere i campi delle 3 tabelle temporanee e mostrarle a video in base ad alcuni parametri.

    Quello che mi chiedo :

    se creo 3 SP che creano 3 Tabelle Temporanee, posso con un'altra SP interrogare le 3 Tabelle Temporanee? o i contenuti delle Tabelle Temporanee vengono perse appena finisce l'esecuzione delle 3 SP?

    Grazie mille se qualcuno vorra' illuminarmi
    Veloce,Affidabile,Economico : Scegline 2

    Se la tua ragazza non te la da, tu non prendertela

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.