SQL: Come copiare una riga nella stessa tabella aggiornamento uno dei campi senza elencare tutti i campi

StackOverflow https://stackoverflow.com/questions/4584060

  •  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:)

È stato utile?

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top