SQL: Come copiare una riga nella stessa tabella aggiornamento uno dei campi senza elencare tutti i campi
-
14-10-2019 - |
Domanda
Ciao Ho cercato una risposta a questa domanda, ma non ho trovato alcun qui. Sto usando Access 2010. Fondamentalmente, ho ottenuto un tavolo con i rapporti e le relazioni hanno un numero di revisione. Ho trovato una risposta su come copiare i campi e aggiornare solo uno di loro, ma sembra un po 'come questo:
INSERT INTO reports (fieldA, fieldB, fieldC, revision, fieldD, fieldE)
SELECT fieldA, fieldB, fieldC, 2, fieldD, fieldE
FROM reports
WHERE <somecondition to select which report to copy>
Cosa è che ho un carico di campi, quindi mi piacerebbe qualcosa che sarebbe più simile a questo:
INSERT INTO reports
SELECT *, revision=2
FROM reports
WHERE <somecondition to select which report to copy>
So che il codice non è corretto; è solo per descrivere quello che vorrei. Come in, un modo per non avere una linea di SQL enorme che elenca tutti i campi, ma solo quello che voglio cambiare. (Voglio mantenere una copia di revisioni precedenti nella stessa tabella)
Grazie in anticipo a chi può aiutare:)
Soluzione 2
Ho trovato un'alternativa interessante a questa domanda, utilizzando una tabella temporanea SQL clone di record con un indice univoco
DROP TABLE #tmp_MyTable
SELECT * INTO #tmp_MyTable
FROM MyTable
WHERE MyIndentID = 165
ALTER TABLE #tmp_MyTable
DROP Column MyIndentID
INSERT INTO MyTable
SELECT *
FROM #tmp_MyTable
posso fare lo stesso, lasciando cadere la chiave primaria e l'aggiornamento della revisione, quindi copiare di nuovo al mio tavolo.
Non è la soluzione che sto cercando, ma un modo alternativo nel frattempo.
EDIT:
Ho provato questa soluzione senza successo: VBA mi dice qualcosa sulla falsariga di "campi con valori multipli non sono consentiti con le istruzioni SELECT INTO (errore runtime 3838)"
Ho sia un campo OLE e un campo di attaccamento, che ho il sospetto di essere la causa dell'errore. Ma ho bisogno di tenerli ...: /
Altri suggerimenti
Sono abbastanza sicuro che non si può fare questo in MS Access o qualsiasi altro sapore di SQL. Cosa si può fare, come probabilmente già sapete, è usare una stored procedure (chiamato una query memorizzata in Access), che prende il tuo numero di revisione e l'id del rapporto di copiare (o alcune altre condizioni WHERE) come argomenti. In questo modo, hanno ancora per specificare tutti i campi, ma si fa solo una volta e nel database invece che nel codice. Un esempio è qui:
http://www.stardeveloper.com/articles/display. html? article = 2001050101 & page = 1
HTH!