Inserimento di record tipo select

sabato 24 luglio 2010 - 10.23
Tag Elenco Tags  C#  |  VB.NET  |  .NET 2.0  |  .NET 3.5  |  Windows Server 2008 R2  |  Windows Server 2008  |  Windows Server 2003  |  Windows Server 2000  |  Windows 7  |  Windows Vista  |  Windows XP  |  Visual Studio 2008  |  Visual Studio 2005  |  SQL Server 2008  |  SQL Server 2005  |  SQL Server 2000  |  SQL Server Express  |  MSDE  |  Access (.mdb)  |  Office 2007  |  Office 2003  |  Internet explorer 8.0  |  Crystal Reports 8.5  |  Crystal Reports 10.0

dompa72 Profilo | Senior Member

Buongiorno,
se devo inserire dei record in una tabella da un'altra tabelle si usa Insert Into TabellaDestinazione....select from TabellaMittente
ho questo caso tabella destinazione formata da Cognome e Nome. Devo inserire tre Nomi diversi con il Cognome in comune, naturalmente non provengono da un'altra tabella ma inseriti tramite un data entry.
In questo momento uso tre query diverse:
Insert Into Tabella (Cognome, Nome) Values ('Rossi', 'Mario')
Insert Into Tabella (Cognome, Nome) Values ('Rossi', 'Pietro')
Insert Into Tabella (Cognome, Nome) Values ('Rossi', 'Pasquale')

E' possibile ridurre tutto ad un unica query???

Grazie

lbenaglia Profilo | Guru

>In questo momento uso tre query diverse:
>Insert Into Tabella (Cognome, Nome) Values ('Rossi', 'Mario')
>Insert Into Tabella (Cognome, Nome) Values ('Rossi', 'Mario')
>Insert Into Tabella (Cognome, Nome) Values ('Rossi', 'Pasquale')
>
>E' possibile ridurre tutto ad un unica query???

Ciao Domenico,

Dipende dal DBMS che utilizzi (e che non hai specificato, o meglio, hai selezionato il selezionabile ).
Con SQL Server 2008 puoi scrivere

INSERT INTO schema.tabella(Cognome, Nome) VALUES ('Rossi', 'Mario'), ('Rossi', 'Mario'), ('Rossi', 'Pasquale');

>Grazie
Prego.

Ciao!

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

dompa72 Profilo | Senior Member

Grazie per la risposta
Il DB è MSSQL 2000 e MSSQL2005 una piccola dimenticanza .
Leggendo la risposta mi sono reso conto che a volte la risposta sta sotto il naso.
Grazie ancora

lbenaglia Profilo | Guru

>Il DB è MSSQL 2000 e MSSQL2005 una piccola dimenticanza .
>Leggendo la risposta mi sono reso conto che a volte la risposta
>sta sotto il naso.
Si, ma quella sintassi non è valida per SQL Server 2000 e 2005.
Con queste versioni potresti ricorrere all'operatore UNION:

INSERT schema.Tabella(col1, col2) SELECT val1, val2 UNION ALL SELECT val3, val4 ... UNION ALL SELECT val_x, val_y;


>Grazie ancora
Prego.

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

dompa72 Profilo | Senior Member

Grazie

dompa72 Profilo | Senior Member

Ho provato con queste due query

Insert Into MyTable (ID_MyTable, ID_MOM) Values (2, 728727), (2, 728728), (2, 728729), (2, 728730)

Insert MyTable (ID_MyTable, ID_MOM) Values Select 2, 728727 UNION ALL Select 2, 728728 UNION ALL Select 2, 728729 UNION ALL Select 2, 728730

la prima non funziona perché utilizzo SQLServer2005 (almeno credo)
la seconda neanche, ho provato anche con Insert into ma mi ritorna sempre che la sintassi non è corretta in prossimità della parola chiave Select

Grazie

lbenaglia Profilo | Guru

>Ho provato con queste due query
>
>Insert Into MyTable (ID_MyTable, ID_MOM) Values (2, 728727),
>(2, 728728), (2, 728729), (2, 728730)
>
>Insert MyTable (ID_MyTable, ID_MOM) Values Select 2, 728727 UNION
>ALL Select 2, 728728 UNION ALL Select 2, 728729 UNION ALL Select
>2, 728730
>
>la prima non funziona perché utilizzo SQLServer2005 (almeno credo)
Credi giusto.

>la seconda neanche, ho provato anche con Insert into ma mi ritorna
>sempre che la sintassi non è corretta in prossimità della parola
>chiave Select
Quando utilizzi la forma INSERT...SELECT NON devi specificare VALUES:

INSERT schema.MyTable (ID_MyTable, ID_MOM) SELECT 2, 728727 UNION ALL SELECT 2, 728728 UNION ALL SELECT 2, 728729 UNION ALL SELECT 2, 728730;

>Grazie
Prego.

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

dompa72 Profilo | Senior Member

Come il post predente, errore sotto il naso e non sono riuscito a vederlo.

Grazie mille

Ultima domanda per questo post
In questo modo guadagno in prestazioni???

lbenaglia Profilo | Guru

>Ultima domanda per questo post
>In questo modo guadagno in prestazioni???
No, ma l'inserimento avverrà in un'unica transazione implicita, quindi se va a buon fine sarai certo di aver inserito tutte le righe, in caso di errore verrà eseguito un rollback automatico delle eventuali righe inserite.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
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