Esiste un modo per eseguire il codice T-SQL all'interno di un flusso di dati in SSIS?
-
10-07-2019 - |
Domanda
Sfondo
Ho una tabella dimensionale che ha un singolo record per ogni giorno. Ogni record ha una chiave primaria, quindi i dati di esempio sarebbero:
Dimension Table --------------- --------------------------------- | ID | DateTime | --------------------------------- | 1083 | 04/10/2008 10:02:00 PM | ---------------------------------
Quello che sto cercando di fare è prendere la mia colonna di dati di origine che ha un valore datetime SQL (come 04/10/2008 10:02:00 PM
) e fare in modo che SSIS dia ciò che il primario la chiave dalla tabella delle dimensioni dovrebbe essere ( 1083
nell'esempio sopra). Sto cercando di adattarlo al flusso di dati all'interno del mio pacchetto ed evitare di utilizzare tabelle di gestione temporanea.
Vorrei chiamare una funzione di database durante il mio flusso di dati affinché il mio pacchetto SSIS rilevi il timeid
per un record datetime
. Ho provato a usare DeriveColumn
ma questo non sembra consentire l'uso di T-SQL; piuttosto solo funzioni integrate in ANSI SQL.
Domanda
C'è un altro modo per farlo all'interno del flusso di dati? O dovrò utilizzare le tabelle di gestione temporanea e utilizzare un SQLTask
al di fuori del flusso di dati per manipolare i miei dati?
Soluzione
Se ti capisco, hai un data mart con una dimensione temporale e devi ottenere il timeId che corrisponde a un determinato momento.
Se è corretto, allora si desidera utilizzare un componente di ricerca. Per la tabella di riferimento usa qualcosa come SELECT timeId, timeStamp FROM TimeDimension
, quindi cerca la colonna di input che contiene il timestamp. Usa timeId come colonna di output e ora ogni riga nel tuo flusso di dati avrà il timeId che corrisponde al suo timestamp.