Suggerimento per l'importazione di dati in blocco


8

Stiamo lavorando a un progetto che richiede l'importazione dei dati dal foglio di calcolo Excel su base giornaliera. I dati verranno importati dal modello predefinito e da ciò che stiamo pensando, prima cariceremo i dati nella tabella temporanea ed eseguiremo le operazioni di pulizia (rimuovendo le informazioni non necessarie, aggiungendo nuove righe nella tabella padre e ottenendo il loro FK, ecc.).

  • Devo sapere se sono disponibili strumenti o utilità che possono ridurre i nostri sforzi.
  • Qual è il modo migliore per INSERIRE record di massa da origini diverse (principalmente da fogli di calcolo Excel)?

L'applicazione che creeremo è un'applicazione basata sul Web in cui l'utente ha un controllo limitato sul server SQL. L'utente caricherà il file tramite browser e il resto dell'operazione verrà eseguito sul lato server.
Kodvavi,

Risposte:


9

SSIS è la strada da percorrere. Se non hai mai creato un pacchetto prima e sai che i tuoi file sorgente (leggi anche: fogli di calcolo) saranno sempre gli stessi, quello che puoi fare è usare la procedura guidata di importazione / esportazione di SQL Server. Nel database SSMS fare clic con il pulsante destro del mouse e selezionare Attività> Importa (o esporta) dati ...

Questo apre una procedura guidata che ti guida attraverso le fasi di selezione dei file di origine / destinazione e delle tabelle di destinazione (può creare tabelle se non esistono già). Dovrai mappare quali colonne vanno dove ma la procedura guidata è piuttosto semplice. Al termine, ti verrà chiesto di eseguire o salvare il pacchetto (o fare entrambi). Salva il pacchetto. Questo salverà il tuo pacchetto in formato .dtsx se scegli di salvarlo nel file system. L'altra opzione è quella di salvare il pacchetto in SQL Server stesso, che li manterrebbe nel database di sistema msdb.

Dopo aver salvato il pacchetto, è possibile creare un processo di SQL Agent per eseguirlo periodicamente (si specifica la pianificazione) in modo da poter sempre caricare le tabelle tramite SSIS. Se vuoi saperne di più su SSIS, dai un'occhiata ai webinar gratuiti della mia azienda (copriamo l'intero stack BI) su PragmaticWorks


In realtà stiamo creando un'applicazione basata sul Web in modo da non consentire all'utente di accedere direttamente all'interfaccia del database. La nostra applicazione prima importa il file e poi facciamo il resto dell'operazione attraverso la nostra applicazione.
Kodvavi,

1
@kodvavi; puoi invocare i pacchetti SSIS tramite il codice .net ...
gbn,

1
@kodvavi, non sono sicuro di cosa intendi con quella frase. In genere le app Web non hanno il compito di avviare un caricamento di dati, quindi perché dovrebbe importare? La parte ETL del database e dell'interfaccia dell'applicazione Web sono due cose diverse.
SQLChicken

So che molte persone avviano pacchetti SSIS dal web ma a me sembra una cattiva idea, dato quanto può andare storto con le fonti di Excel.
Nick.McDermaid

5

Ecco un esempio su come importare dati da Excel a SQL Server. Uno dei problemi principali è assicurarsi di utilizzare il componente di conversione dei dati tra Excel e SQL Server e di eseguire una conversione da NVARCHAR a VARCHAR poiché Excel considera i dati come NVARCHAR.

http://www.mssqltips.com/tip.asp?tip=1393


nvarchar sta bene con noi perché il nostro database supporterà gli attributi multilingue. Sto rivedendo il tema. grazie
kodvavi,


0

Non vorrei scartare nulla da mr. gbn,Sankar Reddy,SQLChicken. Ma vorrei dire che esiste un modo semplice per importare fogli Excel in SQL tramite TSQL "OPENROWSET".

Ad esempio, per importare userfoglio Excel nel TestDBdatabase. Supponiamo che io abbia già creato la [user]tabella nel TestDBdatabase. Quindi il semplice openQLset TSQL sarebbe sotto menzionato in questo modo

Use TestDB;
    Go
    select * INTO [User]
    from openrowset('MICROSOFT.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\TestFolder\User.xlsx; HDR=yes; IMEX=1',
    'select * from [User$]');
    Go

Nota: sto scrivendo questo TSQL in ambiente SQL Server 2012. Il OLEDBprovider openrowset per ogni server SQL sarà diverso. Controllare il OLEDBcollegamento server-> provider supportato per quella versione di SQL server. Nel mio caso lo è ACE.OLEDB.12.0. Prima dell'importazione assicurarsi che Allow inprocesssia selezionato o meno da quel MICROSOFT.ACE.OLEDB.12.0provider. Dovrebbe essere controllato in questo modo inserisci qui la descrizione dell'immagine

Nota: - È testato nell'ambiente di produzione. Ma nel tuo caso senza testare in ambiente di test. Non eseguire direttamente in ambiente di produzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.