2011-10-30 12 views
5

Avendo un problema con la mia situazione attuale, ho cercato attraverso qualsiasi soluzione sulla rete, ma ancora non riesco a ottenerlo.SQL Server: creazione di una tabella temporanea con colonna dinamica

Qui la domanda:

Ho un gruppo di istruzioni SQL che devono essere eseguite in stored procedure utilizzando cursore all'interno, ciascuna delle affermazioni sta eseguendo un inserto scegliendo da un database differenti così come tavolo.

Ad esempio:

INSERT INTO Database1.Table1(column1, column2, column3) 
    SELECT column1,column2, column3 
    FROM Database2.Table2 
    WHERE --Some Condition 

e forse un altro istruzione SQL eseguita è come questo

INSERT INTO Database1.Table3(column1, column2, column3, column4) 
    SELECT column1, column2, column3, column4 
    FROM Database3.Table3 
    WHERE --Some Condition 

Va bene fondamentalmente il mio processo, è come questo

Execute Sql to insert into temp Tables --> Insert into a permanent Table from Temp Tables 

Dall'alto due istruzioni SQL , il mio risultato eseguito da database2 o 3 o può essere 4,5 e così via. Vado al mio database1 f o negozio permanente. In un modo più sintetico di dire che è, voglio solo fare un'altra copia dei dati che provengono da diverse fonti di database e memorizzarli nel mio database locale per fare qualche ulteriore elaborazione.

Il mio problema principale è che il mio responsabile (o responsabile) mi ha detto di inviare tutti i risultati eseguiti in una tabella TEMP o #Table prima di eseguirli nel permanente.

Qualcosa di simile a questo:

INSERT INTO #Table3(column1, column2, column3, column4) 
    SELECT column1, column2, column3, column4 
    FROM Database3.Table3 
    WHERE --Some Condition 

ho passato qualche ricerca su #Temp tavoli e ho trovato la maggior parte di loro sta creando con la colonna 'FIX' come

CREATE TABLE #Table 
(
    column1 VARCHAR(10), 
    column2 VARCHAR(10), 
    column3 VARCHAR(10) 
) 

PROBLEMA: è lì comunque per crearlo con colonne dinamiche? Più in dettaglio modo di chiedere, c'è comunque da inserire per selezionare in una tabella #Temp senza prefisso la colonna? Perché è impossibile per me creare una serie di tabelle temporanee per ogni SQL eseguito.

Grazie

PS 1: Sono un bel novizio di SQL Server, per favore non esitate a esprimere il mio errore o un errore. Tutti impariamo dagli errori.

PS 2: Scusa per il mio scarso livello di inglese, ho fatto del mio meglio per elaborarlo in modo più chiaro.

Saluti:

LiangCk

+2

È possibile utilizzare 'SELEZIONARE coloum1, coloum2, coloum3, coloum4 INTO # Table3 DA Database3.Table3' per creare una tabella in base ai risultati del' select'. È questo che vuoi dire? –

+0

No, questo non è necessario perché potrebbe trattarsi di poche centinaia di sql che potrebbero essere ognuna di esse con un diverso coloum. Se faccio quello che hai fatto, significa che creo qualche centinaio di tavoli Temp? – Worgon

+0

Non sono sicuro di cosa si voglia realizzare; a quanto ho capito, hai diverse tabelle con colonne diverse e devi inserire questi dati in una tabella temporanea. Non puoi semplicemente fare un backup e ripristinare l'intero database in un database temporaneo? O quello, o dovrai gestire un sacco di diversi tavoli temporanei. –

risposta

5

Lei dice che si desidera qualcosa di simile

 


INSERT INTO #Table3(coloum1,coloum2,coloum3,coloum4) 
Select coloum1,coloum2,coloum3,coloum4 
FROM Database3.Table3 
WHERE --Some Condition 

 

senza dover creare la tabella temporanea con colonne fisse prima.

Questo potrebbe funzionare:

 


Select coloum1,coloum2,coloum3,coloum4 
INTO #Table3 
FROM Database3.Table3 
WHERE --Some Condition 

 

Non è necessario creare la tabella temporanea o specificare le colonne prima, basta selezionare nella tabella temporanea e sarà creato al volo.

Sembra che tu voglia fare qualcosa di più di questo ... Non riesco a capire di cosa si tratta, ma sembra che forse si selezionino tutti i dati da vari tavoli in un singolo tavolo temporaneo (I don Non so perché vorresti farlo) ... Se questo è il caso, allora UNION o UNION ALL dovrebbero funzionare. Puoi ancora usarli con la tabella temporanea creata in modo dinamico.

 


Select coloum1,coloum2,coloum3,coloum4 
INTO #Table3 
FROM Database3.Table3 
WHERE --Some Condition 

UNION 

Select column1, column2, column3, null 
FROM Database1.Table1 
WHERE --Some condition 

 

Il null sopra è solo per dare il 2 ° selezionare lo stesso numero di colonne come il primo (io ho usato entrambe le seleziona dal tuo post); questo è un requisito per UNION.

+0

ya, grazie Jeremy ... questo è quello di cui avevo bisogno .. – Worgon

Problemi correlati