Lecture d'un fichier texte avec SQL Server

J'essaie de lire dans un fichier texte à partir d'une requête SQL (SQL Server 2005) mais je n'ai pas de chance du tout. J'ai essayé diverses choses avec EXEC et xp_cmdshell, mais toutes ne fonctionnent pas. C'est la façon générale que j'ai essayé d'aborder ceci:

CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';

J'essaie ensuite de sélectionner les données de la table temporaire. J'ai beaucoup cherché et je ne peux pas dire ce que je me trompe. De l'aide?

27
demandé sur marc_s 2010-01-05 20:30:29

5 réponses

À quoi ressemble votre fichier texte?? Chaque ligne un enregistrement?

Vous devrez vérifier l'instruction BULK INSERT - qui devrait ressembler à quelque chose comme:

BULK INSERT dbo.YourTableName
FROM 'D:\directory\YourFileName.csv'
WITH
(
  CODEPAGE = '1252',
  FIELDTERMINATOR = ';',
  CHECK_CONSTRAINTS
) 

Ici, dans mon cas, j'importe un fichier CSV-mais vous devriez être capable d'importer un fichier texte tout aussi bien.

À partir des documents MSDN-voici un exemple qui, espérons-le, fonctionne pour un fichier texte avec un champ par ligne:

BULK INSERT dbo.temp 
   FROM 'c:\temp\file.txt'
   WITH 
      (
         ROWTERMINATOR ='\n'
      )

Semble fonctionner très bien dans mon environnement de test :-)

36
répondu marc_s 2010-01-05 18:08:32

Vient de découvrir ceci:

SELECT * FROM OPENROWSET(BULK N'<PATH_TO_FILE>', SINGLE_CLOB) AS Contents

Il va extraire le contenu du fichier comme varchar (max). Remplacer SINGLE_CLOB par:

SINGLE_NCLOB pour nvarchar(max) SINGLE_BLOB pour varbinary(max)

Merci à http://www.mssqltips.com/sqlservertip/1643/using-openrowset-to-read-large-files-into-sql-server/ pour ça!

36
répondu Cain 2011-10-20 16:46:21

Avez-vous besoin de le faire une fois, ou dans le cadre du fonctionnement normal de la base de données (c'est-à-dire, en réponse à un déclencheur, un événement planifié, etc.)?

De toute façon, il vaut mieux Créer un paquet SSIS.

  1. dans SQL Management Studio, cliquez avec le bouton droit sur la base de données.
  2. Sélectionnez Tâches / Importer Des Données...
  3. Suivez les instructions de l'assistant. Sélectionnez "fichier texte plat" comme fournisseur lorsque vous y êtes invité.

Je n'ai pas utilisé dbo.xp_cmdshell (par votre exemple), mais j'imagine que capturer la sortie est le problème.

0
répondu 3Dave 2010-01-05 17:39:01

Si vous voulez lire le fichier dans une table en même temps, vous devez utiliser BULK INSERT. D'autre part, si vous preffer pour analyser le fichier ligne par ligne pour faire vos propres vérifications, vous devriez jeter un oeil à ce web: https://www.simple-talk.com/sql/t-sql-programming/reading-and-writing-files-in-sql-server-using-t-sql/ Il est possible que vous ayez besoin d'activer votre xp_cmdshell ou d'autres fonctionnalités D'automatisation OLE. Simple Google et le script apparaîtra. L'espoir d'être utile.

0
répondu Rodrigo 2014-12-16 18:03:06
BULK INSERT dbo.temp 

FROM 'c:\temp\file.txt' --- path file in db server 

WITH 

  (
     ROWTERMINATOR ='\n'
  )

Fonctionner pour moi mais enregistrer sous par editplus à l'encodage ansi multilingue

-2
répondu udorb b 2017-05-14 20:53:44