Domanda

Ho due tabelle con identica struttura e il numero molto grande di campi (circa 1000). Ho bisogno di eseguire 2 operazioni 1) Inserire dalla seconda tabella tutte le righe nel pugno. Esempio:

INSERT INTO [1607348182]
SELECT * 
FROM _tmp_1607348182;

2) Aggiornare la prima tabella dalla seconda tabella ma per l'aggiornamento non riesco a trovare la corretta sintassi SQL per l'aggiornamento.

query come:

Update [1607348182]
set [1607348182].* = tmp.*
from [1607348182]
inner join _tmp_1607348182 as tmp on tmp.recordid = [1607348182].recordid

o

Update [1607348182]
from [1607348182]
inner join _tmp_1607348182 as tmp on tmp.recordid = [1607348182].recordid

non sono validi.

È stato utile?

Soluzione

Non sono sicuro se sarete in grado di raggiungere questo obiettivo senza utilizzare SQL dinamico per costruire l'istruzione di aggiornamento in una variabile.

Questa dichiarazione restituirà un elenco di colonne in base al nome della tabella si mette in:

select name from syscolumns
where [id] = (select [id] from sysobjects where name = 'tablename')

Non sono sicuro se posso evitare un ciclo qui .... è necessario caricare i risultati di sopra in un cursore e poi costruire una query da esso. Pseudo codice:

set @query = 'update [1607348182] set '
load cursor --(we will use @name to hold the column name)
while stillrecordsincursor
set @query = @query + @name + ' = tmp_[1607348182]. ' +@name + ','
load next value from cursor
loop!

Quando la query viene eseguita in fase di costruzione nel ciclo, l'uso exec sp_executesql @query.

Solo un piccolo avvertimento ... la costruzione di SQL dinamico in un ciclo come questo può avere un po 'di confusione. Per la risoluzione dei problemi, mettendo a Selezionare @query nel loop e guardare il @ query vengono costruite.

modifica: Non sono sicuro se sarete in grado di fare tutte le 1000 righe in un aggiornamento in una volta ... ci sono dei limiti logici (varchar (8000)?) Sulla dimensione che @ query può crescere troppo. Potrebbe essere necessario dividere il codice in modo che gestisce 50 colonne alla volta. Mettere le colonne dalle syscolumns SELECT in una tabella temporanea con un id e costruire il vostro SQL dinamico in modo che aggiorna 20 colonne (o 50?) Alla volta.

Un'altra alternativa sarebbe quella di utilizzare Excel per costruire massa questo. Do la colonna selezionare e copiare i risultati nella colonna A di un foglio di calcolo. Mettere '= nella colonna B, tmp. [12331312] nella colonna c, copiare colonna a colonna in D, e una virgola nella colonna e. Copiare l'intero foglio di calcolo in un blocco note, e si dovrebbe avere le colonne della dichiarazione di aggiornamento incorporato per voi. Non è una cattiva soluzione, se si tratta di un evento di un colpo, non so se mi piacerebbe fare affidamento su questo come una soluzione in corso.

Altri suggerimenti

dovrebbe funzionare a tutto ciò di eliminazione dalla tabella principale che aveva un ID in temperatura, poi fare un inserto con i nuovi dati?

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