2008-11-24 20 views

risposta

30

Il punto e virgola deve essere dentro l'ultimo doppio apice con una chiusura parentesi. Quando si aggiungono virgolette singole attorno a una stringa, ricordarsi di aggiungerle al di fuori della cella selezionata.

(spazi aggiunti per visibilità - togli prima di inserire)

=CONCATENATE("insert into table (id, name) values (",C2,",' ",D2," ');")

Ecco un altro vista:

=CONCATENATE("insert into table (id, date, price) values (",C3,",'",D3,"',",B3,");")

+0

hey guys Non sono in grado di eseguire le formule sopra menzionate su Excel 2010, come si dice errore in formula. abd non so come formattare le celle (come c2 e d2) per testo o numero .plz mi guida sullo stesso –

+0

Funziona bene con qualsiasi versione di Excel. Potrebbe essere necessario eliminare un wrapper Text() attorno ai dati. Che aspetto ha l'SQL "finale"? –

0

Perché stai generando SQL in Excel? È più facile e molto più veloce esportare un foglio di lavoro come file CSV e quindi utilizzare alcuni strumenti per importare quel file in un database SQL. Ad esempio la dichiarazione LOAD DATA INFILE di MySQL.

Ci scusiamo per non aver risposto alla tua domanda direttamente, e so che questa non è una soluzione per tutte le circostanze.

+0

I "importa" da Excel per un numero di motivi .... - Non posso semplicemente importare i dati, quindi posso modificare i valori con le formule di Excel. - Gli utenti possono modificare i dati mentre le formule con inserti sono già in posizione. - Formati di date e valori numerici spesso richiedono un tweaking prima dell'importazione. - ... –

+0

Sì, lo faccio ma tengo tutte le formule su un foglio di lavoro separato, organizzato in modo da poter esportare quel foglio di lavoro come CSV. È possibile scrivere formule che leggono le celle in un altro foglio di lavoro come dati di origine. Ma YMMV - Capisco che questo potrebbe non essere applicabile al tuo caso. –

0

Lo stavo facendo ieri, e sì, è fastidioso avere le virgolette giuste. Una cosa che ho fatto è stata una cella con nome che conteneva solo una singola citazione. Digitare in A1 ="'" (uguale, virgolette doppie, virgolette singole, virgolette doppie) e quindi denominare questa cella "QUOTE" digitandola nella casella a sinistra della barra degli strumenti inferiore.

0

A volte, creando SQL Inserts questo sembra essere il modo più semplice. Ma ti stanchi velocemente e non penso che ci siano modi "intelligenti" per farlo (a parte forse macro/programmazione VBA).

mi piacerebbe puntare a evitare di Excel e di esplorare alcune altre idee:

  • uso di accesso (filtro di importazione grande csv, quindi collegamento alla tabella DB e cerchiamo di accesso gestire l'inserto)
  • uso ROSPO (Funzionalità di importazione ancora migliori poiché consente di combinare colonne e persino di importare dagli appunti)
  • utilizza SQL Loader (un po 'complicato da usare, ma veloce e abbastanza flessibile).
0

L'esportazione di un file excel come csv può essere un'opzione alternativa (vedere il post di Bill Krawin - come un nuovo poster, non posso aggiungere ancora commenti). Tuttavia, tieni presente che probabilmente dovrai modificare la formattazione dei tuoi campi data a aaaa-mm-gg, altrimenti le colonne della data mostreranno tutte 00/00/00 - questo perché MySQL usa un dataomat differente per Microsoft Excel. In alternativa usa OpenOffice per salvare il file csv.

0

Come interrogare e inserire i dati dalla cartella di lavoro di Excel al codice sorgente utilizzando ACE/Jet (a.k.a. Access) SQL? Ciò richiede un ACE/Jet che potrebbe essere un altro foglio di calcolo di Excel. Ecco un rapido esempio:

INSERT INTO 
    [ODBC;Driver={SQL Server};SERVER=MYSERVER;DATABASE=MyDatabase;UID=sa;Pwd=mypassword;].MyTable (ID, Name) 
SELECT F1, F2 
    FROM 
    [Excel 8.0;HDR=NO;IMEX=1;Database=C:\db.xls;].[Sheet1$A1:B4]; 
2

A volte uso il sostituto per sostituire i pattern nel comando SQL invece di provare a creare il comando sql fuori dalla concatenazione. Supponi che i dati siano nelle colonne A & B. Inserisci una riga superiore. Al posto cella C1 comando SQL utilizzando modello:

insert into table t1 values('<<A>>', '<<B>>') 

Poi nelle righe 2 posto formula Excel:

=SUBSTITUTE(SUBSTITUTE($C$1, "<<A>>", A2), "<<B>>", B2) 

noti l'uso di cellule indirizzamento assoluto $C$1 per ottenere il modello. Particolarmente piacevole quando si lavora con char o varchar e si deve mescolare le virgolette singole e doppie nella concatenazione. Confronta per:

=concatenate("insert into table t1 values '", A2, "', '", B2, "')" 

Un altra cosa che mi ha morso più di una volta sta cercando di utilizzare Excel per elaborare alcuni caratteri o VARCHAR che sono numerici, se non si hanno gli zeri iniziali come 007. convertirà al numero di Excel 7.

1

l'approccio VBA sarebbe: dichiarare la stringa e assegnare l'istruzione SQL come questo

dim SqlString as String 
SqlString = "SELECT * FROM %1 WHERE (var=%2)" 
SqlString = Replace("%1", "Table_Name") 
SqlString = Replace("%2", ""value"") 

approccio Excel è simile, ma utilizzando la funzione SUBSTITUTE.

Preferisco questo approccio perché rende leggibile il testo SQL ed evita tutti i fastidiosi problemi di & e concatenazione. Sì, richiede una cella in più, ma ne vale la pena per l'audit trail.

1

Conosco questo dolore. Ho finito con lo writing about it on my blog ... twice.
Ho creato una UDF che concatena un intervallo di celle insieme a diverse opzioni. Questo sarà sempre una virgola separare i valori, ma opzionalmente aggiungerà anche virgolette singole e/o parentesi se necessario.

Quindi, si scrive la parte facile della dichiarazione sql.

INSERT INTO table 
VALUES /*string that we don't want to type by hand*/ 

o

SELECT * 
FROM table 
WHERE foo IN (/*another string I don't want to type out*/) 

E l'usanza eccellono funzione qui sotto si trasformerà valori in un intervallo foglio di calcolo in un bel stringa per voi.

Function SQLConcat(rng As Range, Optional quoted As Boolean = False, Optional parenthesis As Boolean = False) As String 
' *************************************************************** 
' * Returns a comma separated list for use in SQL IN statements * 
' * Params * 
' * - rng: Range of cells to concatenate * 
' * - quoted: True/False. If true, values are placed inside * 
' * of single quotes. Default of false * 
' * - parenthesis: Boolean. * 
' * Useful for INSERT INTO tbl VALUES(53),(90),(397) * 
' * * 
' * Author: Christopher J. McClellan * 
' * Published under Creative Commons Attribution-Share Alike * 
' * http://creativecommons.org/licenses/by-sa/3.0/ * 
' * You are free to change, distribute, and pretty much do * 
' * whatever you like with the code, but you must give credit * 
' * to the original author and publish any derivitive of this * 
' * code under the same license. * 
' *************************************************************** 

Dim tmp As String 'temporary string 
Dim row As Long 'first cell is special case 
row = 0 'initalize row count 
Dim c As Object 'cell 
Dim txtwrapperLeft As String, txtwrapperRight As String 

If quoted = True And parenthesis = False Then 
txtwrapperLeft = "'" 
txtwrapperRight = "'" 
ElseIf quoted = True And parenthesis = True Then 
txtwrapperLeft = "('" 
txtwrapperRight = "')" 
ElseIf quoted = False And parenthesis = True Then 
txtwrapperLeft = "(" 
txtwrapperRight = ")" 
Else 
'quoted = false and parenthesis = false 
txtwrapperLeft = "" 
txtwrapperRight = "" 
End If 

For Each c In rng.Cells 
If row = 0 Then 
tmp = txtwrapperLeft & c.Value & txtwrapperRight 
Else 
tmp = tmp & "," & txtwrapperLeft & c.Value & txtwrapperRight 
End If 
row = row + 1 
Debug.Print tmp 
Next c 

'return 
SQLConcat = tmp 
End Function 
Problemi correlati