Importazione di solo dati da excel a slqserver

lunedì 24 settembre 2012 - 15.15

Zagor60 Profilo | Junior Member

Salve,

ho creato una tabella vuota in sql server 2008 , questo perchè non mi avrebbe fatto effettuare le relazioni, adesso come faccio a trasferire solo i dati (i nomi dei campi sono per nome e per numero uguale a quelli della tabella in sql server )dal foglio excel a sql server.
Ho provato a trasferirli con questa codice:
sp_configure 'show advanced options',1
reconfigure with override
go
sp_configure 'Ad Hoc Distributed Queries',1
reconfigure with override
go
SELECT * INTO Tabimbarchi FROM
OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=c:\imbarchi.xls', [imbarchi$])


ma oltre al trasferimento dei dati mi crea anche la tabella che poi non posso più modificare nel senso di creare le relazioni.

Chiedo se esiste un'altro sistema

Saluti

Giancarlo

alx_81 Profilo | Guru

>Salve,
Ciao

>Ho provato a trasferirli con questa codice:
>ma oltre al trasferimento dei dati mi crea anche la tabella che
>poi non posso più modificare nel senso di creare le relazioni.
Questo perchè la clausola INTO nella SELECT crea la tabella al volo e inserisce i dati direttamente.
devi fare
INSERT INTO TuaTabella
SELECT...

>Saluti
ciao
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

Zagor60 Profilo | Junior Member

Grazie per la risposta,

ma non capisco,

INSERT INTO TuaTabella OK
SELECT... cosa devo aggiungere?

saluti

alx_81 Profilo | Guru

>INSERT INTO TuaTabella OK
>SELECT... cosa devo aggiungere?
il risultato di quella select è il resultset che va ad inserire dati nella TuaTabella:

INSERT INTO TuaTabella
SELECT Campi FROM OPENROWSET...

devi invece togliere la clausola INTO dalla select, perchè quella CREA LA TABELLA E LA POPOLA, che non è quello che ti serve.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

Zagor60 Profilo | Junior Member

salve,

funziona ,però ho emesso il fatto che se io inserisco una chiave prima e poi una relazione con un'altra tabella , se la tabella è vuota tutto ok, se invece eseguo il codice Insert into...., mi da lo stesso errore di quando effettuo la relazione con in campi della tabella con dati all'interno e precisamente:

Tabella 'Tabdati' salvata
Tabella 'Tabimbarchi'
- Impossibile creare la relazione 'FK_Tabimbarchi_Tabdati'.
L'istruzione ALTER TABLE è in conflitto con il vincolo FOREIGN KEY "FK_Tabimbarchi_Tabdati". Il conflitto si è verificato nella tabella "dbo.Tabdati", column 'Codice' del database "matrixData".

Come posso fare?

Saluti

alx_81 Profilo | Guru

>funziona ,però ho emesso il fatto che se io inserisco una chiave
>prima e poi una relazione con un'altra tabella , se la tabella
>è vuota tutto ok, se invece eseguo il codice Insert into....,
>mi da lo stesso errore di quando effettuo la relazione con in
>campi della tabella con dati all'interno e precisamente:
>Come posso fare?
Eh questo è un problema risolvibile solo da te.
Nel senso, se fai una relazione e quindi crei anche un vincolo di chiave esterna (FK) devi per forza prima inserire i valori ammessi sulla tabella di "dominio" (la partent della relazione) e poi inserire record nella tabella "figlia" con valori ammessi dal dominio nel campo in cui c'è la relazione. Altrimenti riceverai sempre quell'errore, è un vincolo di integrità referenziale che, per fortuna, previene inserimenti che rendono quanto da te creato non logicamente coerente.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

Zagor60 Profilo | Junior Member

Ciao,

allora io ho due tabelle :

tabella dati
iddati int
codice int (chiave primaria)
cognome
........

tabella imbarchi
idimbarchi int (chiave primaria)
codice int
cognome
........
la relazione che devo creare è uno a molti nel senso che una persona (tabdati) effettua più imbarchi(tabimbarchi) .

se elimino i dati da entrambe le tabelle funziona, ma se lascio almeno una con dati mi da errore.
siccome ci sono tanti dati inseriti non vorrei mettermi li a copiarli, credo che un modo ci sarà di esportare dati on le relazioni già effettuate.

Saluti

alx_81 Profilo | Guru

>Ciao,
>
>allora io ho due tabelle :
>la relazione che devo creare è uno a molti nel senso che una
>persona (tabdati) effettua più imbarchi(tabimbarchi) .
Quali sono i campi in relazione?

>se elimino i dati da entrambe le tabelle funziona, ma se lascio almeno una con dati mi da errore.
>siccome ci sono tanti dati inseriti non vorrei mettermi li a
>copiarli, credo che un modo ci sarà di esportare dati on le relazioni
>già effettuate.
Se c'è una relazione, devi rispettare il vincolo.
Altrimenti elimina il vincolo ma è quello che vuoi?
Magari non ti sto seguendo, puoi farmi un esempio di dati concreto? Se c'è un vincolo di FK devi seguire l'ordine corretto degli inserimenti.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

Zagor60 Profilo | Junior Member

ciao,

esempio

tabella dati
iddati 100
codice 200 (chiave prmaria)
cognome rossi


tabella imbarchi
idimbarchi 130
codice 200
imbarco 12/05/2012
sbarco 12/09/2012

per il solo personale (rossi) effettua molti imbarchi/sbarchi quindi relazine uno a molti

Secondo te fare la relazione intendo come chiavi primarie e FK


alx_81 Profilo | Guru

>Secondo te fare la relazione intendo come chiavi primarie e FK
immagino che il campo sia "codice".
Detto questo, PRIMA devi inserire nella tab "dati" e solo dopo puoi inserire gli imbarchi
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

Zagor60 Profilo | Junior Member

Ciao,

niente, quando vado ad inserire i dati con la funzione INSERT INTO mi dà il solito errore
Messaggio 547, livello 16, stato 0, riga 1
L'istruzione INSERT è in conflitto con il vincolo FOREIGN KEY "FK_tabimbarchi_Tabdati". Il conflitto si è verificato nella tabella "dbo.Tabdati", column 'Codice' del database "matrixData".

Ho provato as inserire degli imbarchi nella tabella vuota e mi da lo stesso errore quindi è un problema di relazioni, puoi aiutarmi nel senso che se ho

tab dati
iddati
codice
nome

tab imbarchi
idimbarchi
codice
data_imbarco
ecc

come posso creare la relazione 1 a molti?
saluti

alx_81 Profilo | Guru

>Ciao,

>come posso creare la relazione 1 a molti?
Zagor60, non posso dirti molto. C'è una relazione che stai violando. Stai cercando di inserire valori nella parte molti che non hanno rispettivi padri già esistenti.
L'errore è quello di violazione di FK, e o lo togli, o lo rispetti. La relazione 1:N è già esistente.
Come ti ho detto PRIMA devi caricare i padri e poi i figli.
Altrimenti il constraint va tolto, ma perdi di integrità referenziale.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5