Mi spiego meglio: ho necessità di popolare alcune tabelle di un db, e
per avere dei dati coerenti e che rispettino i vincoli di chiave
esterna devo per forza di cose "copiarli" da una tabella all'altra.
Ad esempio (mi riferisco a SQL Server su cui sto lavorando):
1) avendo PRODOTTI(ID, DESC) e
DETTAGLIO_ORDINE(ID,PRODOTTO,QTA,PREZZO) quello che vorrei fare è
popolare DETTAGLIO ORDINE.PRODOTTO con i valori reali contenuti in
PRODOTTI.ID.
2) Vorrei anche capire come assegnare dei valori progressivi
(1,2,3,....) in DETTAGLIO_ORDINE.ID, tenendo conto che la colonna non
prevede auto_increment.
Grazie a chi risponderà...
[..]
> 1) avendo PRODOTTI(ID, DESC) e
> DETTAGLIO_ORDINE(ID,PRODOTTO,QTA,PREZZO) quello che vorrei fare è
> popolare DETTAGLIO ORDINE.PRODOTTO con i valori reali contenuti in
> PRODOTTI.ID.
--presumendo che la colonna ID di Dettaglio_Ordine sia IDENTITY, e che
Qta e Prezzo non ammettano NULL e siano di tipo numerico
INSERT Dettaglio_Ordine ( Prodotto, Qta, Prezzo)
SELECT ID, 0, 0 FROM Prodotti
>
> 2) Vorrei anche capire come assegnare dei valori progressivi
> (1,2,3,....) in DETTAGLIO_ORDINE.ID, tenendo conto che la colonna non
> prevede auto_increment.
con SQL 2005 puoi usare la ROWNUMBER (che restituisce il numero
sequenziale di una riga all'interno di una partizione di un set di
risultati, a partire da 1)
INSERT Dettaglio_Ordine ( Prodotto, Qta, Prezzo)
SELECT ROW_NUMBER() OVER ( order by ID), ID, 0, 0 FROM Prodotti
altrimenti ti devi ingegnare parecchio..
>
> Grazie a chi risponderà...
Prego a chi chiese :)
>
--
[Francesco Quaratino]