|
Posted by Erland Sommarskog on 01/29/07 23:00
(e.torresi@alice.it) writes:
> Avrei questo problema
> devo spostare dei campi da una tabella in cui appoggio i record
> recuperati da un file excel in varie tabelle esterne.
> La tabella di appoggio contiene in totale 92 colonne da spostare in
> varie tabelle relazionate.
> In pratica dovrei fare un loop su tutti i record della tabella di
> appoggio prendermi i campi ed inserirli in varie tabelle relazionate
> in cascata tra di loro
> I passi da fare sono:
>
> - leggere i valori nei campi dalla tabella di appoggio,
> - fare una select sulla tabella di destinazione.
> - se esiste un record con gli stessi valori eventualmente fare un
> update per i campi vuoti,
> - altrimenti fare direttamente un' insert di un nuovo record,
> - recuperare l'id del record inserito o trovato quindi leggere altri
> campi dal record della tabella di appoggio
> - quindi effettuare un update o insert di questi nella tabella 2
> relazionata con l' ID recuperato dalla tabella 1
> etc.. per ogni record della tabella di appoggio iniziale.
>
> Ogni record contiene campi di varie tabelle che sono relazionate tra
> loro.
> Premetto di aver già scritto una stored procedure con l'uso di
> cursori, ma vorrei evitare evitare l'uso di questi ultimi...
> Cosa mi consigliate? Potreste farmi un esempio (o indicarmi un link)
> di come fare utilizzando
> un ciclo While se è possibile?
[For those how don't speak Italian, e.torresi has a staging table that
he wants to merge with existing tables.]
Dovrebbe essere di faro questa operazione senza un cursor, ma diventa
difficile che non c'è un chiave unico nella tabella di appoggio. Allora,
presume che c'è un chiave. :-)
Il più facile è probilamente di aggiunere due altri campi alla
tabella di appoggio:
isnew bit NOT NULL DEFAULT 1,
id int NULL
Dope fare come così:
1) UPDATE appoggio
SET id = d.id,
isnew = 0
FROM appoggio a
JOIN destinazione d ON .....
2) UPDATE destinazione
SET col1 = ...
FROM appoggio a
JOIN destinazione d ON a.id = d.id
3) UPDATE altri tabelle
4) INSERT desitniatione (.....)
SELECT ....
FROM appoggio (....)
WHERE isnew = 1
5) UPDATE appoggio
SET id = d.id
FROM appoggio a
JOIN destinazione d ON .....
WHERE a.isnew = 1
6) INSERT altri tabelli
Si hai più domandi, per favore, incluse il tuo procedure.
--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se
Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/prodtechnol/sql/2005/downloads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinfo/previousversions/books.mspx
[Back to original message]
|