J'essaie de lire un fichier texte à partir d'une requête SQL (SQL Server 2005), mais je n'ai aucune chance. 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:
CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';
J'essaie ensuite de sélectionner des données dans la table temporaire. J'ai beaucoup cherché et je ne peux pas dire ce qui ne va pas. Aidez-moi?
À quoi ressemble votre fichier texte ?? Chaque ligne un record?
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 aussi pouvoir importer un fichier texte.
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 parfaitement dans mon environnement de test :-)
Je viens de découvrir ceci:
SELECT * FROM OPENROWSET(BULK N'<PATH_TO_FILE>', SINGLE_CLOB) AS Contents
Le contenu du fichier sera extrait sous la forme varchar (max). Remplacez 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 cela!
si vous voulez lire le fichier dans une table à la fois, utilisez BULK INSERT. D'un autre côté, si vous préférez analyser le fichier ligne par ligne pour effectuer vos propres vérifications, consultez le site Web suivant: https://www.simple-talk.com/sql/t-sql-programming/lecture-et-écriture-fichiers-dans-serveur-SQL-utilisant-t-sql/ Il est possible que vous deviez activer votre xp_cmdshell ou d'autres fonctions d'automatisation OLE. Simple Google il et le script va apparaître . Espérons être utile.
Devez-vous le faire une fois ou dans le cadre d’une opération de base de données normale (en réponse à un déclencheur, à un événement planifié, etc.)?
De toute façon, vous feriez mieux de créer un package SSIS.
Je n'ai pas utilisé dbo.xp_cmdshell (selon votre exemple), mais j'imagine que la capture du résultat est le problème.