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?
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 :-)
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!
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.
- dans SQL Management Studio, cliquez avec le bouton droit sur la base de données.
- Sélectionnez Tâches / Importer Des Données...
- 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.
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.
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