Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: due insert insieme

  1. #1
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218

    due insert insieme

    ciao ragazzi,

    dovrei fare una operazione di questo tipo:

    ho tre tabelle: 'cittadino'e 'nucleo familiare' collegate mediante la tabella 'appartiene'.
    i campi sono (ne elenco solo alcuni):

    cittadino
    -------------
    cod_persona
    cognome
    nome

    appartiene
    ----------------
    cod_persona
    cod_nf
    data_inserimento

    nucleo familiare
    --------------------
    cod_nf
    tipo_nf


    ho realizzato alcune insert nel caso di nuovo cittadino o nuova famiglia 'separatamente', nel senso che i nuovi record che inserisco nella tabella 'cittadino' trattano il caso di cittadini che non appartengono ad alcuna famiglia, e i recod che inserisco nella tabella
    'nucleo familiare' trattano il caso di famiglie che non hanno componenti.. devo infatti modificare la tabella 'appartiene' se voglio abbinare cittadini e famiglie...

    quello che voglio fare io è creare una nuova famiglia direttamente mediante la creazione del cittadino, cioè sarebbe una insert su 'cittadino' + una insert su 'appartiene'

    il problema è che non saprei come gestire la query, cioè come imporre a 'appartiene'. 'cod_persona' il valore appena creato di 'cittadino'.cod_persona'

    non so se mi sono spiegato bene, spero di sì..
    qualcuno di voi potrebbe aiutarmi?

  2. #2
    ma un cittadino puo' appartenere ad un solo nucleo famigliare, quindi la tabella appartiene non serve a un ciuffolo

    metti tutto su cittadino!
    Fiore Bat - www.bcscommunity.it

  3. #3
    posto che una relazione molti a molti come quella che hai indicato ti serva (un cittadino puo' appartenere a n famiglie, una famiglia puo' avere n cittadini), dopo aver inserito un record nella tab cittadino vorresti inserire di seguito un record nella tab appartiene giusto?
    Per questo hai bisogno dell'id del record inserito e quindi devi provvedere ad utilizzare una stored procedure con un valore di ritorno che contenga l'id appena inserito oppure a chiamare una funzione o query sul db per ottenerlo. Una volta ottenuto procedi agli altri inserimenti magari mettendo il tutto all'interno di una transazione.
    i dettagli su come fare cio' dipendono dal db che usi, se usi o meno stored procedures ecc.
    Saluti a tutti
    Riccardo

  4. #4
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    per FiOrEbAt:
    allora, non è detto che un cittadino appartenga ad una sola famiglia, la scelta della relazione molti a molti è stata fatta per il caso in cui un individuo appartiene ad una famiglia ma per motivi suoi deve ad convivere con un'altra famiglia (e ti posso garantire che succede, visto che ho lavorato in anagrafe per un po')... ciò che differenzia le due cose è il rapporto che il cittadino ha nei confronti del capo-famiglia, e questo tipo di rapporto l'ho gestito con un campo 'ruolo_in_nf' (che non ho riportato) nella tabella 'appartiene'..
    infatti uno può essere 'figlio', 'moglie' ecc del capo-famiglia di origine, ma può anche abitare in un'altra famiglia e quindi essere 'convivente' col capo-famiglia dell'altra famiglia (scusa le ripetizioni di parole...)

    per Riccardone:
    io uso vs2005 con sqlserver2005 e c#...
    il problema è proprio prendere quell'indice creato e portarlo come indice nella tabella 'appartiene'.. ho già creato una stored allo scopo (che ti posterò più tardi, visto l'orario per cui devo interrompere... ti prego di scusarmi )

    cmq grazie ad entrambi per l'interessamento

  5. #5
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    ecco la stored come avevo detto nel mio precedente post:

    create PROCEDURE ins_nuovo_citt_in_nuova_fam
    (
    @cod_p_citt int,
    @cognome varchar(30),
    @nome varchar(30),
    @cod_p_appartiene int,
    @cod_nf int,
    @data_ins datetime
    )

    AS

    insert into cittadino
    ( cod_persona,
    cognome,
    nome
    )
    values
    (
    @cod_p_citt,
    @cognome,
    @nome
    )

    insert into appartiene
    (
    cod_persona,
    cod_nucleo_familiare,
    data_inserimento_in_nf_conv
    )
    values
    (
    @cod_p_appartiene,
    @cod_nf,
    @data_ins
    )

    RETURN

    come faccio a imporre il 'cod_p_citt' nel 'cod_p_appartiene'?

    ps: il cod_p_citt non è identity

  6. #6
    che lo crei con stored o meno cambia poco

    .. se le chiavi primarie delle tabelle sono calcolate da te non c'è problema, salvi il valore nella prima e lo metti nella seconda, se non è cosi' è un problema, c'è un rowid, o forse è oracle?

    non mi ricordo ^^
    Fiore Bat - www.bcscommunity.it

  7. #7
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    no, non c'è alcun rowid e non è oracle... uso sqlserver2005 e c#
    il problema è appunto come salvare il valore della prima pk e impostarlo nella seconda...

  8. #8
    Originariamente inviato da _J_
    come faccio a imporre il 'cod_p_citt' nel 'cod_p_appartiene'?
    una domanda mi sorge spontanea: perche', visto che il parametro @cod_p_citt e' uguale per entrambe le query di insert non usi lo stesso parametro e togli di mezzo l'inutile @cod_p_appartiene?
    Saluti a tutti
    Riccardo

  9. #9
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    si può fare? ci avevo pensato, ma non è che crea problemi di temporizzazione?

  10. #10
    Si che si puo' fare.
    Non so cosa intendi per "problemi di temporizzazione".
    Saluti a tutti
    Riccardo

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.