2010-10-20 9 views
6

Can SqlBulkCopy peut-il créer une table, un peu comme un SELECT INTO?Can SqlBulkCopy crée une table à partir d'une sélection Sql

+0

Je souhaite déplacer des données d'une base de données Oracle vers une base de données SQL Server, et j'aimerais que les tables de destination soient créées automatiquement, est-ce possible en utilisant SqlBulkCopy? –

Répondre

0

Il semble que SqlBulkCopy ne puisse pas créer de tables par lui-même. La table de destination doit être prédéfinie. Dans le cas où la destination a obtenu une identité incrémentielle automatique (int), il suffit d'utiliser un 1 dans l'instruction select dire

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

SQL Server va gérer l'incrément automatique par lui-même.

+0

Que se passe-t-il si le fichier est différent à chaque fois, n'est-il pas possible de créer la table à la volée? – Si8

0

Je pense que la réponse ci-dessus n'était pas très claire.

Vous devez créer une table avec SQL. Il n'y a pas d'autre moyen. Et si vous avez juste besoin de créer une structure de colonne, il est assez simple si votre source est dans le même serveur, il suffit de le faire:

Select * from source_table into destination_table where 1=2 

Si votre source n'est pas même serveur (par exemple, il est Excel ou d'un fichier DBF ou autre), la meilleure chose à faire est de s'y connecter avec ODBC (ou SQL si possible), et lui envoyer:

Select * from source_table where 1=2 

puis recueillir résultat dans DataTable. Ensuite, dans la deuxième étape, vous devez créer une procédure stockée sur votre serveur de destination qui prendra cette table comme argument, puis l'insérer dans une nouvelle table.

Un peu plus précisément, essayez ceci pour la procédure SQL: http://www.builderau.com.au/program/sqlserver/soa/Passing-table-valued-parameters-in-SQL-Server-2008/0,339028455,339282577,00.htm

Et créer objet SqlCommnand en C# et ajouter à sa collection de paramètres SqlParameter qui SqlDbType.Structured

Je ne suis pas dans chaque détail, mais espérons que cela peut aider.

Questions connexes