2011-05-09 6 views
1

Je suis sûr que c'est un problème courant, mais je n'arrive pas à trouver exactement l'aide que je recherche. Toutes mes excuses! J'essaie d'effectuer une insertion en masse à partir d'un fichier CSV. La table dans laquelle je dois insérer les données contient quelques champs qui ne peuvent pas être null, comme un champ d'identificateur unique de ligne normalement généré avec newid(), et Quelques autres champs tels que le numéro d'identification de l'utilisateur effectuant les changements, etc ...SQL Server Bulk Insert - Comment définir les champs manquants?

En passant en revue en ligne, je pense que je comprends comment faire une importation en bloc de base si le fichier CSV contient le même nombre de champs que la table, OU s'il est correct de laisser les champs manquants par défaut ou par défaut, mais je n'ai pas pu trouver quelque part qui me montre comment assigner des valeurs aux fichiers CSV, et aussi prédéfinir les autres valeurs de table requises. Il serait extrêmement utile que quelqu'un puisse me montrer comment faire une importation à partir d'un CSV où je peux assigner des champs manquants à partir de variables dans ma procédure stockée!

Des conseils? Voici le code que j'ai essayé d'utiliser pour y arriver.

BULK 
INSERT tbl1_ 
FROM '\\...\importtest.txt' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 
GO 
--Check the content of the table. 
SELECT * 
FROM tbl1_ 
GO 
--Drop the table to clean up database. 
SELECT * 
FROM tbl1_ 
GO 
+0

duplication possible de [BULK INSERT avec un nombre incohérent de colonnes] (http://stackoverflow.com/questions/2601941/bulk-insert-with-inconsistent-number-of-columns) –

+0

@Dustin Laine: pas tout à fait le même que celui-ci en particulier, mais il existe d'autres doublons – gbn

+0

duplication possible de [quand utiliser un fichier de format pour le programme de copie en bloc (bcp)] (http://stackoverflow.com/questions/1994411/when-to-use-a- format-fichier-pour-bulk-copy-programme-bcp) – gbn

Répondre

2

Avez-vous vu "Keeping Nulls or Using Default Values During Bulk Import" qui s'applique à bcp et BULK INSERT? Je ne l'ai pas fait cela pendant un certain temps (je charger une table simple mise en scène et d'enrichir plus tard lors d'une étape de rinçage séparée) mais il semble que les valeurs par défaut peuvent être conservés lorsque vous utilisez:

INSERT ... SELECT * FROM OPENROWSET(BULK...) 

Pour les colonnes manquantes , vous devez utiliser format files.

Les deux idées sont légèrement différentes. Personnellement, je chargerais une table de transfert, puis j'en ferais une copie afin que les colonnes CSV et de la table de transfert correspondent. Ensuite, j'aurais une 2ème étape où je chargerais la "vraie" table. Cela vous permet de vérifier les données en premier ou d'effectuer un traitement post-bcp.

+0

Hmmm-je pourrais faire cela, utiliser une table temporaire, puis le copier sur la table réelle. J'espérais qu'il y avait une solution plus élégante, cependant. J'ai regardé cette page de fichiers de format, mais je n'étais pas sûr si cela me permettrait de faire ce que je voulais faire. Je vais y jeter un autre coup d'œil et peser mes options. Merci! – Joshua