SQL Server, Bulk Insert
Je veux importer une colonne d'un fichier de texte dans une de mes tables sql. Le fichier est juste une liste de jurons.
J'ai écrit la suite de TSQL pour ce faire
BULK INSERT SwearWords
FROM 'c:\swears.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
Cependant il des erreurs avec unexapected la fin du fichier. Le tableau de la gi à l'importation est juste un champ d'identité suivie d'un champ de type nvarchar que je veux insérer le texte. Il fonctionne très bien si je l'ai ajouter dans le fichier texte "1," au début de eveyr ligne, je suppose que c'est parce que SQL si la recherche de 2 champs. Est-il un moyen de contourner cela?
Grâce
Une raison quelconque vous ne voulez pas utiliser SSIS?
OriginalL'auteur Gavin | 2009-06-16
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser FORMATFILE pour cela. Voir BULK INSERT.
Pour de plus amples informations, voir En Utilisant Des Fichiers Au Format.
Que diriez-vous un exemple d'un FORMATFILE pour l'insertion avec un nombre différent de colonnes? Il est étonnamment difficile de trouver un.
OriginalL'auteur RedFilter
Cela est décrit dans les livres sur la ligne pour BULK INSERT en vertu de la KEEPIDENTITY argument. Voici ce qui est dit
Donc, soit d'utiliser un format de fichier ou de fournir une valeur factice et assurez-vous de ne pas utiliser le KEEPIDENTITY argument
OriginalL'auteur SQLMenace
Aussi, vous pouvez créer une vue sur votre table basée seulement sur la colonne nvarchar, et puis en VRAC INSÉRER dans votre point de vue. C'est très propre manière d'utiliser l'instruction BULK INSERT.
De cette façon, vous n'avez pas besoin de vous soucier de votre colonne d'IDENTITÉ, ou la création d'un fichier de format.
Votre instruction BULK INSERT devrait ressembler à ceci:
OriginalL'auteur Jesse
Vous devez vous assurer que la structure de votre fichier texte et le tableau de match - si la table dispose de deux champs, puis vous devrez fournir deux champs/colonnes dans le fichier texte.
Depuis la première colonne dans la table SQL est un champ d'IDENTITÉ, vous pouvez offrir de la valeur que vous souhaitez, mais vous devez avoir une valeur y, je ne pense pas qu'il y a moyen de contourner ce problème.
Marc
Essentiellement, oui, mais celle de l'OP n'a pas l'air de savoir pourquoi....
J'aurais juré au premier post ne comprend pas le "en VRAC" de l'instruction juste "INSÉRER" - oh, eh bien, doit avoir raté ça ....
OriginalL'auteur marc_s
Vérifier que la dernière ligne a CR/LF (\r\n). Parfois, c'est le problème, d'autres fois un retour chariot supplémentaire est à la fin du fichier.
Vous pouvez le vérifier avec un hexeditor.
OriginalL'auteur Alan Featherston
Vous pouvez supprimer la colonne d'identité et le remettre lorsque vous avez terminé. Alternativement, si les pauses de votre base de données de relations, vous pourriez faire de l'importation à l'aide de DTS ou SSIS si c'est une fois l'importation -- un contrôle plus granulaire de jongler avec des colonnes
OriginalL'auteur Rad
Dans SQL Server 2008, je l'ai trouvé plus facile de créer un fichier contenant beaucoup de plaquettes comme ça, et de le coller dans la Gestion de Studio de la fenêtre de requête, plutôt que de le combattre avec obtenir le fichier de format et d'insertion en bloc les autorisations de fichier:
http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-use-of-row-constructor/
OriginalL'auteur Matthew Lock