Insert in tabelle con Relazione molti a molti..

domenica 22 marzo 2009 - 23.44

babbubba Profilo | Senior Member

Ciao a tutti...
Io ho un problema che magari vi sembrerà banale ma non riesco a superare...

Ho due tabelle ... per esempio:

Tabella1:
STUDENTI
-idStudente
-nome
-cognome
-...

Tabella2:
CORSI
-idCorso
-titolo
-....

Tra le due tabelle c'è una relzione molti a molti perche uno studente puo' far piu corsi ed un corso è associato a piu studenti...

Ecco quindi la tabella di link:
STUDENTI_CORSI
idStudente
idCorso
DataIscrizione

Fin qui nessun problema.
ho fatto le dovute relzioni sul db.

Ora devo però inserire un nuovo studente ed effettuare l'insert sulla tabella studenti ma allo stesso tempo sulla tabella di link per associare lo studente al corso... Ci vorrebbe qualcosa tipo un ... INSERT INTO STUDENTI JOIN STUDENTI_CORSI...
Qualche idea?
Grazie in anticipo.

Babbubba
www.babbubba.tk

Chiedere è curiosità ... rispondere è educazione.

lbenaglia Profilo | Guru

>Ora devo però inserire un nuovo studente ed effettuare l'insert
>sulla tabella studenti ma allo stesso tempo sulla tabella di
>link per associare lo studente al corso... Ci vorrebbe qualcosa
>tipo un ... INSERT INTO STUDENTI JOIN STUDENTI_CORSI...
>Qualche idea?

Certo, usare le transazioni esplicite:

BEGIN TRAN; INSERT STUDENTI... INSERT STUDENTI_CORSI... COMMI TRAN;

Se utilizzi SQL Server 2005+ puoi incapsulare il tutto in un blocco TRY...CATCH in modo da gestire al meglio un eventuale errore.
Infine puoi racchiudere il codice in una stored procedure parametrica che si occuperà dell'intera operazione.

>Grazie in anticipo.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

babbubba Profilo | Senior Member

Grazie per la risposta "espressa"... :-)

Cque il mio problema è che mentre inserisco lo studente sono a conoscenza dell'id del corso ma come faccio ad inserire l'id dello studente nella tabella di link visto che la chiave primaria è autoincrement e non ho idea di quale sarà mentre faccio l'inserimento?

Mi sono spiegato?

Grazie 1000.

Babbubba
www.babbubba.tk

Chiedere è curiosità ... rispondere è educazione.

lbenaglia Profilo | Guru

>Cque il mio problema è che mentre inserisco lo studente sono
>a conoscenza dell'id del corso ma come faccio ad inserire l'id
>dello studente nella tabella di link visto che la chiave primaria
>è autoincrement e non ho idea di quale sarà mentre faccio l'inserimento?
Se il codice è incapsulato in una stored procedure, subito dopo aver inserito lo studente utilizza la funzione SCOPE_IDENTITY() per recuperare l'ID Studente appena inserito.
A questo punto hai tutti i dati per popolare la tabella STUDENTI_CORSI.
http://msdn.microsoft.com/en-us/library/ms190315.aspx

>Grazie 1000.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

babbubba Profilo | Senior Member

Grazie della dritta!
Mai usato le stored procedure... quindi adesso mi faccio una cultura in merito :-).
Appena ottengo risultati ti faccio sapere...
Grazie :-)

Babbubba
www.babbubba.tk

Chiedere è curiosità ... rispondere è educazione.

babbubba Profilo | Senior Member

Ciao... vi rompo l'ultima volta per questa storia... la mia benedetta insert sotto forma di stored procedure sarebbe la seguente (dimentica il discorso studenti ... :-).

DELIMITER | CREATE DEFINER = 'root'@'localhost' PROCEDURE `InsertArticoliLinkMAgazzini` ( IN `iEan13` int, IN `iCode39` varchar(20), IN `iBarcode` varchar(20), IN `iDescrizione` varchar(20), IN `iDescrizioneSup1` varchar(20), IN `iDescrizioneSup2` varchar(20), IN `iEtichetta` varchar(16), IN `iDataIns` datetime, IN `iDataMod` datetime, IN `iStato` varchar(1), IN `iIdCategoria` int, IN `iCosto` decimal(9,3), IN `iIdMagazzino` int, IN `iGiacenza` int ) BEGIN INSERT INTO ARTICOLI ( barcodeEAN13, barcodeCODE39, barcode_originale, descrizione, descrizione_supplementare_1, descrizione_supplementare_2, descrizione_Etichetta, datainserimento, datamodifica, stato, FKcategoria, valore) VALUES ( iEan13, `iCode39`, iBarcode, iDescrizione, iDescrizioneSup1, iDescrizioneSup2, iEtichetta, iDataIns, iDataMod, iStato, iIdCategoria, iCosto); INSERT INTO link_articoli_magazzini ( fkArticolo, fkMagazzino, giacenza) VALUES ( @@IDENTITY, iIdMagazzino, iGiacenza); END| DELIMITER ;

Funziona perfettamente:-) Grazie 1.000.000


Babbubba
www.babbubba.tk

Chiedere è curiosità ... rispondere è educazione.

lbenaglia Profilo | Guru

>Ciao... vi rompo l'ultima volta per questa storia... la mia benedetta
>insert sotto forma di stored procedure sarebbe la seguente (dimentica
>il discorso studenti ... :-).
>
>DELIMITER |
>
>CREATE DEFINER = 'root'@'localhost' PROCEDURE `InsertArticoliLinkMAgazzini`
Che DBMS usi? MySQL?
Io pensavo SQL Server... mi spiace, non conosco questa sintassi...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

babbubba Profilo | Senior Member

Si Mysql ma è identico a parte per scopeidentity :-)

Grazie ancora.

Babbubba
www.babbubba.tk

Chiedere è curiosità ... rispondere è educazione.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5