2010-10-20 14 views
6

Czy SqlBulkCopy może utworzyć tabelę, na przykład SELECT INTO?Czy SqlBulkCopy może utworzyć tabelę z selekcji SQL?

+0

Chciałbym przenieść dane z bazy danych Oracle do bazy danych serwera Sql i chciałbym, aby tabele docelowe były tworzone automatycznie, czy jest to możliwe przy użyciu SqlBulkCopy? –

Odpowiedz

0

Wygląda na to, że SqlBulkCopy nie może sam tworzyć tabel. Tabela docelowa musi być predefiniowana. W przypadku, gdy docelowy ma auto przyrostowe tożsamości (int), wystarczy użyć 1 w select tj

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

SQL Server będzie obsługiwać auto przyrost sama.

+0

Co jeśli plik jest inny za każdym razem, czy tak nie jest, może utworzyć tabelę w locie? – Si8

0

Myślę, że odpowiedź powyżej nie była całkiem jasna.

Musisz utworzyć tabelę z SQL. Nie ma innego wyjścia. A jeśli trzeba tylko stworzyć strukturę kolumn, to jest bardzo proste, jeśli źródłem jest w tym samym serwerze, to wystarczy, aby to zrobić:

Select * from source_table into destination_table where 1=2 

Jeśli źródło nie jest w tym samym serwerze (np to Excel lub pliku DBF lub cokolwiek), najprostszym rozwiązaniem jest, aby połączyć się z nim z ODBC SQL (lub jeśli to możliwe), i wysłać go:

Select * from source_table where 1=2 

a następnie zebrać wynik do DataTable. Następnie w drugim kroku należy utworzyć procedurę składowaną na serwerze docelowym, która zajmie tę tabelę jako argument, a następnie wstawi ją do nowej tabeli.

Nieco bardziej precyzyjnie, spróbuj to dla procedury SQL: http://www.builderau.com.au/program/sqlserver/soa/Passing-table-valued-parameters-in-SQL-Server-2008/0,339028455,339282577,00.htm

I utworzyć obiektu SqlCommnand w C# i dodać do swojej kolekcji Parametry SqlParameter że jest SqlDbType.Structured

nie iść do każdego szczegółów, ale mam nadzieję, że może to pomóc.

Powiązane problemy