2010-10-20 6 views
6

Can SqlBulkCopy può creare una tabella, un po 'come SELECT INTO?Can SqlBulkCopy può creare una tabella da una selezione Sql

+0

Mi piacerebbe spostare i dati da un database Oracle a un database SQL Server e vorrei che le tabelle di destinazione venissero create automaticamente, è possibile utilizzando SqlBulkCopy? –

risposta

0

Sembra che SqlBulkCopy non possa creare tabelle da solo. La tabella di destinazione deve essere predefinita. Nel caso in cui la destinazione ha un auto incrementale di identità (int), basta usare un 1 nell'istruzione SELECT cioè

SELECT 
    1, 
    [ColumnName], 
    [ColumnName]... 
FROM TABLENAME 

SQL Server consente di gestire l'incremento automatico di per sé.

+0

Cosa succede se il file è diverso ogni volta, non è comunque possibile creare il tavolo al volo? – Si8

0

Penso che la risposta sopra non fosse abbastanza chiara.

È necessario creare una tabella con SQL. Non c'è altro modo. E se avete bisogno solo per creare la struttura della colonna, allora è abbastanza semplice se la sorgente è sullo stesso server, è sufficiente per fare questo:

Select * from source_table into destination_table where 1=2 

Se la sorgente non è nella stesso server (ad esempio, è Excel o DBF file o qualsiasi altra cosa), la cosa più semplice da fare è collegare ad esso con ODBC (o SQL se possibile), e mandarlo:

Select * from source_table where 1=2 

e poi raccogliere risultato in DataTable. Quindi, nella seconda fase, dovresti creare una stored procedure sul tuo server di destinazione che prenderà quella tabella come argomento e poi la inserirà nella nuova tabella.

Un po 'più precisamente, provate questo per la procedura SQL: http://www.builderau.com.au/program/sqlserver/soa/Passing-table-valued-parameters-in-SQL-Server-2008/0,339028455,339282577,00.htm

e creare oggetto SqlCommnand in C# e aggiungere al suo SqlParameter parametri collezione che si SqlDbType.Structured

non sono andato in ogni singolo dettaglio, ma spero che possa aiutare.